我不確定我是否理解這個問題,但這裏有一個解釋可能會有所幫助。
在普通的JavaScript(即ECMAScript中)中,當一個函數被調用與new
操作者,其this
引用彷彿其內部[[Prototype]]
集到構造的公共prototype
對象創建由new Object()
一個新對象。
這是返回的新對象(不需要return this
,這是默認操作),除非返回其他對象。
當一個函數被調用時,它的this
完全由該調用設置,上下文(即範圍)是不相關的。
所以:
function Moo() {
// if called with new, this references a new object
}
// Assign a new object to Moo.prototype,
// replacing the default object given to all functions
Moo.prototype = {
someMethod: function() {...},
...
}
// Create an instance of Moo
var moo = new Moo();
// Call a method
moo.someMethod();
在最後一行中,內someMethod
this
將引用moo
對象,但完全是基於該方法如何被調用,它無關moo
是如何構造或它被稱爲的上下文。
例如如果someMethod
被稱爲如下:
var x = moo.someMethod;
x();
的this
價值尚未確定,所以在someMethod
它會默認爲全球(窗口)對象,或者在嚴格的模式,它是不確定的。
請注意,上述情況與呼叫的上下文無關,this
是動態的,並且完全由呼叫設置(忽略ES5 bind)。
你描述的沒有意義。如果你在'Moo'構造函數內部使用'this',或者說'Moo.prototype.foo()'方法,它會引用Moo'的實例。請展示一個實際有問題的代碼示例,描述你期望發生的事情,以及發生了什麼*。 – JAAulde
我想OP是問他如何設置一個'myNameSpace.Moo'構造函數。 –
是的,我更好地更新了它,它是窗口對象不是父對象的任何這個。 – Rob