1.理论摘要:
js继承:
每个javascript对象都包含着对另一个对象(原型对象)的内部引用。原型对象的任何属性,表现为每个以它为原型的对象的属性。
javascrpt对象从它的原型哪里继承属性。
2.理解new运算符:
1.使用new运算符来创建一个空对象,然后把构造函数作为这个对象的一个方法来调用。
2.创建了一个空对象之后,new运算符设置了这个对象的原型。一个对象的原型就是它的构造函数的prototype属性值。
3.函数:
所有的函数都有一个prototype属性,当这个函数被定义的时候,prototype属性自动创建和初始化。prototype属性的初始化值是一个对象,这个对象只带有一个属性,这个属性名为constructor,它指回到和原型相关联的那个构造函数。
这就是每个对象都有一个constructor属性的原型。
添加给这个原型对象的任何属性,都会成为被构造函数所初始化的对象的属性。
构造函数初始化的每个对象都确实从原型哪里继承了完全相同的一组属性。原型对象是放置方法和其他不变属性的理想地方。
理解对象如何继承prototype原型对象的属性的:
"继承作为查找一个属性值的过程的一部分自动发生"。
属性并非从原型对象复制到新对象,它们只是像那些对对象的属性一样出现。
这有两个重要的含义:
1.使用原型对象可以显著地减少每个对象所需的内存数量,因为对象可以继承原型的很多属性。
2.即便是在对象创建以后才添加到原型中的属性,对象也可以继承它。
可以使用for/in循环来枚举获得从prototype对象继承的属性。
<script type="text/javascript">
var myObj = new function() {
var a = 1;
}
//alert(myObj);//output [object object]
//alert(myObj.a);//output undefined
var myObj1 = new function() {
var a = 1;
return 1;
}
//alert(myObj1);//output [object object]
//alert(myObj1.a);//output undefined
var myObj2 = new function() {
this.a = 1;
return this.a;
}
//alert(myObj2);//output [object object]
//alert(myObj2.a);//output 1
alert(myObj2.constructor);
var myObj3 = new function() {
alert('1');// output 1
}
alert(myObj3.constructor);
</script>