码迷,mamicode.com
首页 > 其他好文 > 详细

学习记录2

时间:2019-08-12 23:45:49      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:返回   情况   调用   改变   原型链   prot   type属性   length   child   

(1)原型/原型对象

创建构造函数

function HI(name){

this.name=name;

this.sayHi=function(){

console.log(this.name)}

}

缺点:每创造一个对象都会新辟一个内存位置来存放功能函数,多个执行会减低性能

改进1

function HI(name){

this.name=name;

this.sayHi=sayHi;}

}

function sayHi(){

console.log(this.name);}

缺点:多个执行容易出现重名情况同时也不好查找

最终改进

采用原型

例0

Hi.prototype.sayHi=function(){

console.log(this.name);}

同时对象可以访问到原型的成员

在调用对象的属性和方法的时候,会先去找对象本身的属性和方法,没有才去找原型里的对象和方法,如果查找的东西在二者都没有时会报错

对象的__proto__(为非标准属性)等于构造函数中的.prototype

在原型对象中有一个constructor属性

该属性作用是记录了创建该对象的构造函数

只要是对象就会有__proto__属性,原型也拥有这个属性

而原型的__proto__指向object对象(object原型对象),object对象的prototype指向Object构造函数

再次指向object原型对象的__proto__属性,则指向null

从而形成一条原型链:在调用对象的属性和方法时,本身查找不到会按这条原型链查找下去,直到没有返回报错信息

例本身有一个Student构造函数

有一个调用该函数的s1对象

s1对象通过s1.__proto__指向Student构造函数的原型,Student构造函数的原型通过Student原型对象的__proto__指向Object原型对象,Object原型对象通过Object原型对象的__proto__指向null

在设置属性值时不会搜索原型链,所以一个对象的prototype值修改时不会使另一个对象受影响,因为不搜索原型链而采用新增属性值来完成

一般情况下,对象的属性值在构造函数中设置,对象的方法在构造函数中的原型设置,重新改变原型中的prototype属性,将原型设置为一个对象

例1

Student.prototype={

sayHi:function(){

console.log(‘hi‘);},(用逗号分隔开)

ok:function(){

console.log(‘ok‘);}

}

上面比较便捷,但是会导致s1.constructor属性不能正确显示出构造函数,因为会将prototype属性重新覆盖,显示的值为原型链下一个constructor的值

改进

Student.prototype={

constructor:Student,

sayHi:function(){

console.log(‘hi‘);},(用逗号分隔开)

ok:function(){

console.log(‘ok‘);}

另一个注意点,想使用原型对象,要先设置原型对象,否则无法访问原型

}

(2)

var arr=[4,5,6,8];

Array.prototype.getSum=function(){

//获取数组中的值采用this

for(i=0;i<this.length;i++){//}

}

注意数组或者String不能修改prototype的值,所以不能采用例1的写法,要用例0的写法

(3)防止他人不按规则调用函数

function Ok(option){

option=option||{};

this.name=option.name||‘xiaoming‘;

}

(4)对象拷贝

function extend(parents,child){

for(var key in parents){

if(child[key])

{

continue;}

child[key]=parents[key];

}

则子只需写不需要继承的数值。

(5)继承

指类型与类型之间的关系

目的是把子类型共同部分提升到父类型

1原型继承

child.prototype=new Parent();

child.prototype.constuctor=child;

缺点:无法设置构造函数的参数,不实用

 

学习记录2

标签:返回   情况   调用   改变   原型链   prot   type属性   length   child   

原文地址:https://www.cnblogs.com/linquesblog/p/11327844.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!