javascript创建新方法

javascript创建新方法,javascript,Javascript,使用prototype方法,我们可以创建新的方法。。。像 Object.prototype.newMethod=function(){ // do something } 这里我用一个匿名函数定义newMethod。。。现在,如果我想使用这个方法,我必须像:.newMethod()那样使用它 但是现在我想创建一个新的方法,我可以使用它,比如:.newMethod。。。没有括号。。。我该怎么做 请不要使用任何jQuery…呃,您不能。要调用一个方法,可以在它后面加括号。否则你只是在引用它

使用
prototype
方法,我们可以创建新的方法。。。像

Object.prototype.newMethod=function(){
   // do something
}
这里我用一个匿名函数定义
newMethod
。。。现在,如果我想使用这个方法,我必须像:
.newMethod()那样使用它

但是现在我想创建一个新的方法,我可以使用它,比如:
.newMethod。。。没有括号。。。我该怎么做


请不要使用任何jQuery…

呃,您不能。要调用一个方法,可以在它后面加括号。否则你只是在引用它


此规则的唯一例外是当您编写类似于
new Date
的内容时,括号是隐式的,因为
new
关键字,并且只是因为没有给出参数。

呃,您不能。要调用一个方法,可以在它后面加括号。否则你只是在引用它


此规则的唯一例外是,当您编写类似于
new Date
的内容时,括号是隐式的,因为
new
关键字,并且只因为没有给定参数。

调用没有括号的函数的唯一方法是使用and定义它


注意,这些是JavaScript 1.8的新功能,并非所有浏览器都支持。

调用无括号函数的唯一方法是使用and定义函数

请注意,这些是JavaScript 1.8的新功能,并非所有浏览器都支持。

我真的不明白您为什么要这样做,但这是可能的,尽管有一个令人讨厌的黑客解决方法。AFAIK,您实际上在寻找的是一个神奇的属性(比如
someArray.length
属性)

这只是想告诉你,是的,理论上是可能的,但是请,请,不要使用这种过度污染的黑客。。。我还没有完全测试过这个,但是我已经注意到,
console.log(foo.length)可以返回不同的值,但不确定原因:

foo = {val:'foo'};
foo.length = (function(that){return function(){ return that.val.length;};})(foo);
foo.length.valueOf = (function(method){return function(){return method();};})(foo.length);
foo.length;//returns 3, great
foo.val += 'bar';
console.log(foo.length);//logged 3 at first, now it's back to logging 6!<-- don't trust this is the conclusion
foo={val:'foo'};
foo.length=(函数(that){return function(){return that.val.length;};})(foo);
foo.length.valueOf=(函数(方法){return function(){return method();};})(foo.length);
foo.length//返回3,太好了
foo.val+=‘bar’;
控制台日志(foo.length)//开始记录3,现在又回到记录6 我真的不明白你为什么要这么做,但这是可能的,尽管有一个讨厌的黑客解决方法。AFAIK,您实际上在寻找的是一个神奇的属性(比如
someArray.length
属性)

这只是想告诉你,是的,理论上是可能的,但是请,请,不要使用这种过度污染的黑客。。。我还没有完全测试过这个,但是我已经注意到,
console.log(foo.length)可以返回不同的值,但不确定原因:

foo = {val:'foo'};
foo.length = (function(that){return function(){ return that.val.length;};})(foo);
foo.length.valueOf = (function(method){return function(){return method();};})(foo.length);
foo.length;//returns 3, great
foo.val += 'bar';
console.log(foo.length);//logged 3 at first, now it's back to logging 6!<-- don't trust this is the conclusion
foo={val:'foo'};
foo.length=(函数(that){return function(){return that.val.length;};})(foo);
foo.length.valueOf=(函数(方法){return function(){return method();};})(foo.length);
foo.length//返回3,太好了
foo.val+=‘bar’;

控制台日志(foo.length)//开始记录3,现在又回到记录6!简单回答:不要这样做。如果你想传递一个对该方法的引用,你可以使用
。newMethod
,不需要魔法。否则我不知道你想做什么。。。你想执行一个方法而不调用它吗?我需要使用
newMethod
而不是
newMethod()
来触发匿名函数为什么不使用
()
是必要的/重要的?实际上我想构建一个类似
.parentNode
的方法。。。我们不写
parentNode()
。。。仅
parentNode
。。。不
()
…简单的回答是:不要这样做。如果你想传递对该方法的引用,你可以使用
。newMethod
,不需要魔法。否则我不知道你想做什么。。。你想执行一个方法而不调用它吗?我需要使用
newMethod
而不是
newMethod()
来触发匿名函数为什么不使用
()
是必要的/重要的?实际上我想构建一个类似
.parentNode
的方法。。。我们不写
parentNode()
。。。仅
parentNode
。。。否
()
…它是一个参数的名称,传递给IIFE,创建一个闭包。。。简单地说,
that==foo
。因为
(函数(that){})(foo)感谢您的评论@Elias Van Ootegem。。。我想那
有点像这
。。。现在,
我很清楚,
是一个参数的名称,传递给一个IIFE,创建一个闭包。。。简单地说,
that==foo
。因为
(函数(that){})(foo)感谢您的评论@Elias Van Ootegem。。。我想那
有点像这
。。。现在,
我很清楚了。。。