我想在String上定义一个自动调用函数
的原型String.prototype.overEstimatedLength = (function() {
return this.length + 12345
})()
然后像这样使用它
'hello world'.overEstimatedLength
不幸的是,这不起作用。 语法上是否可能,为什么上面的例子不起作用?
注意:我知道属性定义更合适(例如Getter),我对自我调用函数特别感兴趣。
答案 0 :(得分:2)
你的例子的问题在于,实际上并没有像#34;自我调用函数那样的事情,只有" 立即 -invoked函数表达式",重点是立即。
考虑这样的事情:
String.prototype.foo = alert('foo');
'foo'.foo;
'foo'.foo;
立即运行alert('foo')
,然后将结果存储在String.prototype.foo
中。 。 。然后只检索几次结果(不做任何事情)。所以'foo'
只会收到一次警报。
你的例子很相似;你立即调用你的函数表达式。
答案 1 :(得分:1)
您似乎正在尝试在String.prototype
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())