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();
}