簡體   English   中英

JavaScript-作為自調用函數(IIFE)的原型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM