簡體   English   中英

Javascript-構造函數的屬性和原型

[英]Javascript - Constructor's properties & Prototype

我試圖了解有關構造函數的一件事。 也就是說,我不明白如何使用Foo.prototype.property訪問函數對象的屬性,也就是構造函數的屬性,例如:

//let's create new function object with predefined properties
function Foo() {
    this.name = "Mike"; 
    this.returnName = function() {
                       return 'This persons name is ' + this.name + '.';
                      };
};

//now let's create new object using constructor and prototypal inheritance
var mike = new Foo();

mike.returnName(); //returns "This persons name is Mike."

我知道邁克繼承了Foo原型的屬性。 因此,這些屬性必須存在於原型內部。 新對象使用__ proto __指向帶有內部原型鏈接的原型。 我明白了。 我無法解決的問題是如何工作的:

Foo.prototype.returnName();

構造函數具有帶有原型屬性的.prototype鏈接,反之亦然,原型具有帶有Foo的.constructor鏈接。

我知道調用Foo(); 函數首先調用window.returnName(); 將返回該句子,因為此上下文設置為window。

這是因為當我使用原型調用該方法時,會將其分配給窗口嗎? 有什么辦法可以訪問/調用此構造方法的屬性?

您沒有在Foo的原型上指定returnName。 如果您要這樣做:

function Foo(){
    this.name = "Mike"; 
}

Foo.prototype.returnName = function(){
   return 'This persons name is ' + this.name + '.';
};

var mike = new Foo();

mike.returnName();

情況會有所不同。

函數returnName未分配給Foo的原型。 而是將其分配給Foo每個實例,就像name"Mike"

每當您調用new Foo()都會創建一個新的上下文,這就是該實例的this上下文。

如果直接(不帶new )調用Foo() this是全局對象( window )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM