Javascript 是否可以只在函数闭包中应用对象的原型?
我想要Javascript 是否可以只在函数闭包中应用对象的原型?,javascript,closures,Javascript,Closures,我想要“asd”。to_selector()未在功能外工作。怎么做?还是有必要 不,这是不可能的,在你的例子中,我想说的是,这并没有什么用处。为什么不直接使用: function test(){ String.prototype.to_selector=function(a){return "#"+a;} return "asd".to_selector(); } 如果为本机对象(此处为String)分配原型方法,则会为该对象的所有后续调用分配原型方法 您可以将一个方法直接分配
“asd”。to_selector()代码>未在功能外工作。怎么做?还是有必要 不,这是不可能的,在你的例子中,我想说的是,这并没有什么用处。为什么不直接使用:
function test(){
String.prototype.to_selector=function(a){return "#"+a;}
return "asd".to_selector();
}
如果为本机对象(此处为String
)分配原型方法,则会为该对象的所有后续调用分配原型方法
您可以将一个方法直接分配给一个真正的字符串对象,但我也没有看到这方面的任何用例:
function test(){
var to_selector = function(a){return "#"+a;};
return to_selector("asd");
}
不,这是不可能的,在你的例子中,我认为这并没有什么用处。为什么不直接使用:
function test(){
String.prototype.to_selector=function(a){return "#"+a;}
return "asd".to_selector();
}
如果为本机对象(此处为String
)分配原型方法,则会为该对象的所有后续调用分配原型方法
您可以将一个方法直接分配给一个真正的字符串对象,但我也没有看到这方面的任何用例:
function test(){
var to_selector = function(a){return "#"+a;};
return to_selector("asd");
}
通过修改String
prototype是不可能的,因为这将修改执行此函数后创建的字符串的所有实例
我认为没有必要为只在特定函数范围内工作的本机对象提供方法。用例是什么?您始终可以将静态方法添加到String
对象中,或将实例方法添加到String
原型中(请注意,这不是一个好的做法),并且只能在测试中使用它
您还可以创建一个可用于该目的的新对象,尽管您失去了直接从字符串声明调用到_selector
的优雅:
var test = function(a){
var str = new String(a);
str.to_selector = function(){return "#"+this;}
return str.to_selector();
}
alert(test('asd')); //=> '#asd'
alert('bla'.to_selector()); //=> error
但是,我还是看不出这样做有多方便。修改String
prototype是不可能的,因为这将修改执行此函数后创建的所有String实例
var string2 = function(str) {
this.str = str;
};
string2.prototype = {
to_selector: function() {
return '#' + this.str;
},
toString: function() {
return this.str;
}
};
function test(){
asd = new string2("asd");
return asd.to_selector();
}
我认为没有必要为只在特定函数范围内工作的本机对象提供方法。用例是什么?您始终可以将静态方法添加到String
对象中,或将实例方法添加到String
原型中(请注意,这不是一个好的做法),并且只能在测试中使用它
您还可以创建一个可用于该目的的新对象,尽管您失去了直接从字符串声明调用到_selector
的优雅:
var test = function(a){
var str = new String(a);
str.to_selector = function(){return "#"+this;}
return str.to_selector();
}
alert(test('asd')); //=> '#asd'
alert('bla'.to_selector()); //=> error
但是,我还是不明白这样做有多方便。你为什么要这么做?只要正常地定义一个“to_selector”函数并调用它,我是一个ruby person,我想要一个真正的对象方法,在许多使用.to_selector()的函数中重用它。很抱歉把这个问题说错了,我想@Sergi已经找到了我真正需要做这件事的原因。你为什么可能想这么做呢?只要正常地定义一个“to_selector”函数并调用它,我是一个ruby person,我想要一个真正的对象方法,在许多使用.to_selector()的函数中重用它。很抱歉错误地陈述了这个问题,我认为@Sergi已经找到了我实际需要的方法。每当你基于另一个对象创建一个对象时,原始对象原型就会被新对象继承。这可能会有帮助。@无用的代码:这个注释不应该解决这个问题吗?我想我对javascript原型的理解是合理的;它不是针对你的,只是将它添加到你帖子中的信息中,因为它与我将要发布的答案非常相似。每当你基于另一个对象创建一个对象时,原始对象原型将被新对象继承。这可能会有帮助。@无用的代码:这个注释不应该解决这个问题吗?我想我对javascript原型的理解是合理的;它不是针对你的,只是把它添加到你帖子的信息中,因为它与我要发布的答案非常相似。哇。。。。你我问错了问题,但你给了我我需要的答案!令人惊叹的。。。。感谢+1“我看不出这有多方便”,请编程成一种语言,停止在js.wow中编写Ruby/Java/C/etc。。。。你我问错了问题,但你给了我我需要的答案!令人惊叹的。。。。感谢+1“我看不出这有多方便”,请编程成一种语言,停止用js编写Ruby/Java/C/etc。
var string2 = function(str) {
this.str = str;
};
string2.prototype = {
to_selector: function() {
return '#' + this.str;
},
toString: function() {
return this.str;
}
};
function test(){
asd = new string2("asd");
return asd.to_selector();
}