2013-12-16 77 views
2

這個原型函數有可能返回false,還是一個總是返回true的無意義檢查?在原型函數中,'this'可能是未定義的嗎?

if (!Date.prototype.hasOwnProperty("foo")) { 
    Date.prototype.foo = function() { 
     var date = this; 
     if (!date) { 
      return false; 
     } 
     return true; 
    } 
} 
+0

你期望'this'是Date對象還是隻是檢查函數是否得到某種'this'? (你可以將'window'看作'this'非常簡單...) –

+0

有條件地分配一個原型(儘管可能)可能會很複雜。你絕對相信你需要有條件地分配一個這樣的原型嗎? – Sukima

+0

這只是我正在看的一個原型的頂部的一段代碼...只是想知道我是否可以刪除它,因爲我想不出它會被擊中的方式。有沒有'this'這個方法不能成爲調用變量,例如。爲'var date = new Date(); date.foo();'? – joshschreuder

回答

4

如果啓用strict mode JavaScript中的this關鍵字只有undefined。否則,它就參照默認window對象,除非以下任何爲真:

  • 該函數使用new操作者
  • 不同的對象綁定到this使用call()apply()
  • 被稱爲
+0

+1:文檔鏈接[call](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects /功能/呼叫)/ [應用](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply?redirectlocale=en-US&redirectslug=JavaScript%2FReference%2FGlobal_Objects %2FFunction%2Fapply)「:如果方法是非嚴格模式代碼中的函數,則null和undefined將被全局對象替換。 –

+0

因此,如果我處於嚴格模式下,並且調用'Date.prototype.foo.call(undefined)'或'.apply(undefined)',那麼這可能發生的唯一方法是? – joshschreuder

相關問題