原型链的构成
通过__proto__连接成原型链:
Grand.prototype.proto --> Object.prototype(对象的最终原型).proto -->null
Grand.prototype.lastName = "Deng";
function Grand (){}
var grand = new Grand();
Father.prototype = grand;
function Father(){
this.name = "GT";
this.num = 100;
this.fortune = {
card1:"100"
};
}
var father = new Father();
Son.prototype = father;
function Son(){
this.hobbit ="smoke";
}
var son = new Son();
原型链上属性的增删改查
增删改查和原型一样,只能自己调用修改。
特殊点:
delete son.fortune.card1;
son.fortune.card2 = "200";
--> 相当于调用引用值,调用父级的属性再加以覆盖,还是相当于父级自己增删改
son.num ++;
father.num --> 100
son.num -->101// 取父亲原型上的num加1,赋给自身,相当于自己增加了num属性。
Person.prototype = {
height:100
}
function Person(){
this.eat = function(){
this.height ++;
}
}
var person = new Person();
//调用原型上的100加1,赋值给自身一个新的height:101。
绝大多数对象的最终都会继承自Object.prototype
1、undefined /null 是原始值,也不能进行包装类,没有原型
2、var obj = Object.create(null);//这个对象没有原型
- 假设手动给创建的对象加上“原型”:
obj.__proto__ = {
name:"lgt"
}
obj.name--> undefined
- 手动的添加__proto__相当于给对象加了一个属性,但不是原型。而加的这个属性是一个对象,该对象有自己的原型。