這是一道非常好的面試題, 考察以下知識點: 1,this的指向 2,原型(prototype)以及原型鏈 3,繼承 4,引用 要解出這道題,要理解以下幾句話就可以了: 1,每一個構造函數,都有一個原型[[prototype]]屬性 指向構造函數的原型對象 2,每一個實例生成的時候,都會在記憶體中產生一 ...
1 function Parent() { 2 this.a = 1; 3 this.b = [1, 2, this.a]; 4 this.c = { demo: 5 }; 5 this.show = function () { 6 console.log(this.a , this.b , this.c.demo ); 7 } 8 } 9 function Child() { 10 this.a = 2; 11 this.change = function () { 12 this.b.push(this.a); 13 this.a = this.b.length; 14 this.c.demo = this.a++; 15 } 16 } 17 Child.prototype = new Parent(); 18 var parent = new Parent(); 19 var child1 = new Child(); 20 var child2 = new Child(); 21 child1.a = 11; 22 child2.a = 12; 23 parent.show(); 24 child1.show(); 25 child2.show(); 26 child1.change(); 27 child2.change(); 28 parent.show(); 29 child1.show(); 30 child2.show();
這是一道非常好的面試題, 考察以下知識點:
1,this的指向
2,原型(prototype)以及原型鏈
3,繼承
4,引用
要解出這道題,要理解以下幾句話就可以了:
1,每一個構造函數,都有一個原型[[prototype]]屬性 指向構造函數的原型對象
2,每一個實例生成的時候,都會在記憶體中產生一塊新的堆記憶體
3,每一實例都有一個隱式原型__proto__ 指向構造函數的原型對象
4,this的指向 取決於this調用時的位置, 在這道題中, 也可以簡單理解為, 誰調用方法, this就指向哪個對象
5,數組和字面量對象 都是 引用
6,原型鏈的查找規則: 就近原則
- 當實例上存在屬性時, 用實例上的
- 如果實例不存在,順在原型鏈,往上查找,如果存在,就使用原型鏈的
- 如果原型鏈都不存在,就用Object原型對象上的
- 如果Object原型對象都不存在, 就是undefined
為了幫助大家, 我貼出課堂上的示意圖, 如果有不理解的,歡迎互動,交流