2012-12-30 60 views
-1
function User(first, last){ 
    if (!(this instanceof arguments.callee)) 
    return new User(first, last); 

    this.name = first + " " + last; 
} 

var name = "Resig"; 
var user = User("John", name); 

assert(user, "This was defined correctly, even if it was by mistake."); 
assert(name == "Resig", "The right name was maintained."); 

要檢查實例是否使用new運算符創建,我們在構造函數中執行這些操作。如何檢查該對象是否使用調用或應用方法

if (!(this instanceof arguments.callee)) 

OR

if (!(this instanceof ___)) 

OR

if (!(this instanceof User)) 

我已經閱讀了本論壇,arguments.callee的貶值,我們必須使用應用或呼叫方法來代替。

如何檢查使用調用或應用方法的對象實例?

+1

這是爲什麼呢? –

+1

你能澄清你最後一個問題嗎?似乎不是一個完整的連貫思想。 –

+0

我正在尋找不同的方法來檢查實例是否是該類型的對象。 – Kevin

回答

1

我認爲你展示的最後一個選項是正確的方法來查看構造函數是否用new調用。但是,我個人不喜歡這個過程。它鼓勵開發人員在沒有新操作員的情況下調用構造函數。

+0

我同意,我們是否可以使用致電或申請方法進行檢查。 – Kevin

+0

調用方法和apply方法提供了函數將在其下運行的上下文。他們基本上做同樣的事情,只是傳遞不同的論點。我沒有看到這是如何相關的。 –

相關問題