如何解决是否可以仅在函数闭包内应用对象的原型?
|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();
}
但是,我再也看不到这有什么方便。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。