[英]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
,必須實例化Foo
“ var foo = new Foo()
”,而不是調用foo.x
返回Foo's
instance屬性x
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.