繁体   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