如果我有一個類:的CoffeeScript:使用的instanceof VS Class.constructor.name
class Haha
constructor: (@lolAmount = 1) ->
alert @lolAmount
我想檢查的對象是正確類的,是否總是安全使用constructor.name
:
haha = new Haha()
unless haha.constructor.name is 'Haha'
throw Error 'Wrong type'
或者是它更好地使用instanceof
:
haha = new Haha()
unless haha instanceof Haha
throw Error 'Wrong type'
有一種說法我有爲instanceof
使用extends
當是:
class BigHaha extends Haha
bigHaha = new BigHaha
console.log bigHaha instanceof Haha #true
但如何安全是它,是一個JavaScript運營商 - 我覺得我應該是懷疑它。
另一方面,與constructor.name
很清楚發生了什麼。是否保證constructor.name
將在所有對象上設置?
感謝您的任何信息。
非常感謝!只是爲了確認,構造函數的'name'屬性是CoffeeScript是嗎?對於那些我不關心子類/超類的類是可靠的嗎? – phenomnomnominal 2012-07-27 16:25:19
@phenomnomnominal:['name'來自JavaScript的'Function'](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/name),並且是非標準的,所以它可能會也可能不會工作。使用'instanceof'或直接比較'constructor'函數。但是,真的,只需使用'instanceof'。 – 2012-07-27 16:37:33
我記得有關'constructor.name'屬性被closure/uglifyjs破壞的coffeescript問題的討論。另一件值得了解的事情是'instanceof'只能用於你自己的對象,而不是內置類型。但我同意,對於這種使用,'instanceof'是更好的選擇。 *編輯:* [這裏是一個類似的討論](https://github.com/mishoo/UglifyJS/issues/290)。 – 2012-07-27 16:56:01