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