阅读量:1
原型链:
1.如何构成原型链?
2.原型链上属性的增删改查。
3.绝大多数对象的最终都会继承自Object.prototype (var obj = Object.create(null或者undefined)没有原型)。
4.Object.create(原型)。
构成原型链和操作原型链属性:
//最顶的原型是Object.prototype Grand.prototype.__proto__ = Object.prototype; Grand.prototype.lastName = "Deng"; function Grand(){ }; var grand = new Grand(); Father.prototype = grand; function Father(){ this.name = "xuming"; this.fortune = { card1 : "visa", }; this.num = 100; }; var father = new Father(); Son.prototype = father; function Son(){ this.hobbit = "smoke"; }; var son = new Son(); //操作原型链上的属性,son会在自身生成一个属性 son.num++; // ---> son.num = son.num + 1; console.log(father.num); //100 console.log(son.num); //101 //操作原型链上的对象中的属性,son不会生成属性 son.fortune.card2 = 'master' console.log(son.fortune); //{card1 : 'visa',card2 : 'master'} console.log(father.fortune); //{card1 : 'visa',card2 : 'master'}
原型中this的指向:
//a.sayName() sayName里面的this指向是,谁调用的这个方法,this就是指向谁 Person.prototype = { name : "a", sayName : function(){ console.log(this.name); } } function Person(){ this.name = "b"; } var person = new Person(); person.sayName(); //b person.__proto__.sayName(); //a
Object.create(原型):
对象形式:
var obj = {name : "sunny"}; var obj1 = Object.create(obj); console.log(obj1.name); //sunny
函数形式:
Person.prototype.name = "sunny"; function Person(){ } var person = Object.create(Person.prototype); var person1 = new Person(); console.log(person.__proto__.name); //sunny console.log(person1.__proto__.name); //sunny