function test(){
String.prototype.to_selector=function(a){return "#"+a;}
return "asd".to_selector();
}
我希望"asd".to_selector();
不在函数之外工作。怎么做?还是有必要的?
答案 0 :(得分:2)
不,这是不可能的,在你的例子中,我说的并不是真的有用。为什么不直接使用:
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
答案 1 :(得分:2)
通过修改String
原型是不可能的,因为这会修改在执行此函数后创建的所有String实例。
我认为不需要为只在特定函数范围内工作的本机对象提供方法。用例是什么?您始终可以向String
对象添加静态方法,或者向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();
}
但是,再一次,我看不出这是多么方便。
答案 2 :(得分:2)
function test(){
String.prototype.to_selector=function(a){return "#"+a;}
var o = "asd".to_selector();
delete String.prototype.to_selector;
return o;
}