快速注意:請不要在您的答案中解釋JavaScript繼承的基礎知識。爲什麼和如何__proto__記得構造函數的未定義原型成員的舊屬性?
這裏是一些簡單的構造函數,它的一些屬性附加到它的原型成員。
function Foo() {
this.relationship = "Love";
};
Foo.prototype.name = "Natalie";
Foo.prototype.age = 22;
Foo.prototype.country = "France";
現在我們用Foo創建新對象並測試一些基礎知識。一切都很酷。
var girl = new Foo();
girl.hasOwnProperty("relationship"); //=> true
girl.hasOwnProperty("name"); //=> false
girl.relationship; //=> "Love"
girl.name; //=> "Natalie", this comes from Foo.prototype
girl.__proto__ === Foo.prototype; //=> true
girl.__proto__.name === Foo.prototype.name; //=> true
girl.name === Foo.prototype.name; //=> true
而且,如果我們更新Foo.prototype.name屬性的值,那麼girl.name指向新值,因爲它應該如此。
Foo.prototype.name = "Lucia";
girl.name; //=> "Lucia", this comes from Foo.prototype
神奇的事情發生了,當我們改變Foo.prototype並使其空,未定義,空對象等
Foo.prototype = null;
如果我們女孩對象有一個隱藏__ proto__
(ECMA [原型]])鏈接到Foo.prototype,然後製作Foo.prototype null應該沒有機會女孩獲得名稱財產,但它!
girl.name; //=> "Lucia"
girl.age; //=> 22
girl.country; //=> "France"
現在,如果我們在此時使用Foo創建另一個對象。它沒有名稱,年齡和國家,因爲,當然,因爲Foo.prototype是空的。
var new_girl = new Foo();
new_girl.name; //=> undefined
new_girl.age; //=> undefined
new_girl.country; //=> undefined
所以我的問題是如何在地球上以前的對象(女孩)和他的隱藏__ proto__
鏈接可以記住這些屬性我們分配Foo.prototype後空?
哦,我從一個非常錯誤的角度看它。謝啦。接受的答案。 – 2013-02-17 20:57:44