簡體   English   中英

為什么訪問功能對象上的屬性會給出未定義?

[英]Why accessing property on a function object gives undefined?

使用this運算符訪問功能對象Foo屬性x時,其undefined 為什么呢

function Foo(){ 
        this.x = "bar";
        return this;
    }

console.log(Foo.x); //undefined

我相信聲明一個函數JS會自動創建一個可以添加屬性的函數對象。 例如,這有效:

Foo.today = "Sunday";
console.log(Foo.today); // Sunday

功能是對象。 您要添加一個“x”屬性無論this是指當功能Foo()被調用,但沒有在你的代碼中調用它。

如果要這樣調用函數:

Foo.call(Foo);

在檢查Foo.x的值Foo.x ,它將起作用。 但是,通常,函數調用中的this不是對函數本身的引用。

您也可以:

Foo.x = "bar";

通常 ,在函數(尤其是用作構造函數的函數)中this分配屬性是為了管理對象( 不是函數本身的對象)的屬性。 所以:

var f = new Foo();

將為您提供一個對象,該對象的屬性名為“ x”,值為“ bar”。

只需刪除return this; 並使用var f = new Foo() 然后console.log(fx)將起作用。

說到非“嚴格”模式,在您使用的上下文中, this關鍵字默認為全局對象,因為尚未由對函數本身的調用來設置它。 因此,您只需在window對象上設置x屬性。

調用Foo.x將返回'undefined'因為x是實例(對象)屬性而不是函數屬性( Foo.x = "bar" )。 將x聲明為類(函數)屬性Foo.x = "bar"; 而不是在console.log(Foo.x)調用它。

在這種情況下, x是實例屬性( this.x ='bar' ),而不是class( function )屬性(如Foo.x='bar' )才能訪問Foo.x ,必須實例化Foovar foo = new Foo() ”,而不是調用foo.x返回Foo's instance屬性x

暫無
暫無

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

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