2014-07-06 76 views
0
var Person = function() { 
    this.name = "Jay"; 
} 

Person.prototype.getName = function() { 
    return this.name; 
} 

var jay = new Person(); 
console.log(jay.getName()); // Jay 
console.log(Person.prototype); // { getName: [Function] } 

當我打電話new Person(),我認爲它設置jay's內部[[prototype]]財產Person.prototype對象。所以我明白,當我嘗試訪問一個不存在的屬性時,它將檢查對象的[[prototype]]對於getName是Person.prototype。如果我錯了,請糾正我。'原型'對象如何訪問'this'的新創建對象?

我很困惑的是Person.prototype對象能夠從this訪問jay?從我所瞭解的this引用的對象調用方法,這是Person.prototype而不是jay,並且此對象不具有name屬性。

+1

下面的答案可能有助於理解更多關於原型,構造函數和這個值:http://stackoverflow.com/a/16063711/1641941 – HMR

回答

1

您將「定義方法的地方」與「執行方法的對象」混爲一談。在Person.prototype上定義了,但該方法在該特定對象上被調用。

+0

只是爲了確認,當原型鏈發現'getName'它會在執行該方法之前執行'jay.getName = Person.prototype.getName'嗎?或者使用'call'方法?謝謝 – Jae

+0

@Jay:都不是,真的。原型鏈首先用來查找屬性,所以不需要複製任何東西,'call()'不是必需的 - 但是效果與使用'call '用這個函數。 – Chuck