[英]JavaScript - prototype as a self invoking function (IIFE)
我想在String上定義一個原型,它是一個自調用函數
String.prototype.overEstimatedLength = (function() {
return this.length + 12345
})()
然后像這樣使用它
'hello world'.overEstimatedLength
不幸的是,這不起作用。 這樣的語法在語法上是否可行,為什么上面的示例不起作用?
注意:我知道屬性定義會更合適(例如Getter),我對自調用函數特別感興趣。
您的示例的問題在於,實際上並沒有“自調用函數”之類的東西,只有“ 立即調用的函數表達式”,重點是即時 。
考慮這樣的事情:
String.prototype.foo = alert('foo');
'foo'.foo;
'foo'.foo;
這將立即運行alert('foo')
,然后將結果存儲在String.prototype.foo
。 。 。 然后僅幾次檢索該結果(不執行任何操作)。 因此, 'foo'
只會收到一次警報。
您的示例與此類似; 您將立即調用函數表達式。
似乎您正在嘗試在String.prototype
上定義getter
Object.defineProperty(String.prototype, 'overEstimatedLength', { get: function() { return this.length + 12345; } }); console.log('hello'.overEstimatedLength)
您的代碼不起作用,因為它立即執行了函數並將其結果分配給String.prototype.overEstimatedLength
。 也就是說,它幾乎與...完全相同。
function myFunc() {
return this.length + 12345
}
String.prototype.overEstimatedLength = myFunc();
以下將完成一些工作,但是您將其稱為函數,請注意您正在返回一個函數,因此將其分配給String.prototype
String.prototype.overEstimatedLength = (function() { return function() { return this.length + 12345; } })() console.log('something'.overEstimatedLength())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.