是否可以仅在函数闭包内应用对象的原型?

|
function test(){
    String.prototype.to_selector=function(a){return \"#\"+a;}
    return \"asd\".to_selector();
}
我想要
\"asd\".to_selector();
在功能之外不起作用。怎么做?还是有必要?     
已邀请:
        
function test(){
    String.prototype.to_selector=function(a){return \"#\"+a;}
    var o = \"asd\".to_selector();
    delete String.prototype.to_selector;
    return o;
}
    
        不,这是不可能的,在您的示例中,我说这并不是真的有用。为什么不使用:
function test(){
    var to_selector = function(a){return \"#\"+a;};
    return to_selector(\"asd\");
}
如果为本机对象分配原型方法(此处为
String
),则会为该对象的所有后续调用分配该方法。 您可以将方法直接分配给真正的
String
对象,但同样,我真的没有看到任何用例:
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
    
        修改“ 4”原型是不可能的,因为这将修改执行此函数后创建的String的所有实例。 我认为没有必要为仅在特定功能范围内起作用的本机对象提供方法。用例是什么?您总是可以向method4ѭ对象添加静态方法,或者向
String
原型添加实例方法(请注意,这不是一种好习惯),只能在
test
内使用它。 尽管失去了直接从字符串声明中调用
to_selector
的优雅功能,但您也可以创建一个新对象以用于该目的:
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();
}
但是,我再也看不到这有什么方便。     

要回复问题请先登录注册