JavaScript:在原型中定义的方法中获取变量名
如何在String()的原型中定义的方法中获取变量名?JavaScript:在原型中定义的方法中获取变量名
String.prototype.foobar = function() {alert(/*something here...*/);};
var s="I'm just a stupid string!";
s.foobar();
应该返回包含 “S” 的警告......
如何管理呢?
关于。
编辑:
您可以下载这个话题在这里的结果:https://github.com/ninov/onChange
JavaScript有串原语(它们不是真正的JavaScript对象),并且有方法的字符串对象。我假设字符串基元更加高效,并且像您一样静态声明的字符串将默认为基元。在大多数情况下,Javascript会在需要时自动将原语转换为对象。当我在Chrome中运行你的代码时,它会这样做,并且我会收到警报。
如果你想确保它是一个对象,你可以像这样把它声明:
String.prototype.foobar = function() {alert("fun");};
var s = new String("I'm just a stupid string!");
s.foobar();
欲了解更多信息有关此主题的看到here节“字符串原语和字符串对象之间的区别”。
如果你想要做的是从foobar()方法获取变量名,那么这不是Javascript支持的任何标准方式。
如果这些都不是你实际要求的,请澄清你的问题。
这是不可能的。它不应该是。
如果你真的想知道这个元数据,你应该考虑使用对象:
var obj = {
s: "I'm just a stupid string!"
};
for(var x in obj){
alert(x + '=' + obj[x]); // logs: s=I'm just a stupid string!
}
但是你为什么要编程知道变量名?
“我要让一种自定义事件,检查如果字符串变化了的”
那是不可能的。字符串是不可变的。
如果你想让函数提醒实际的变量名称,那也是不可能的。如果你有一个String对象,可以有多个引用同一个对象的变量。它如何知道使用哪个名称?
你应该定义一个对象来做你想要的。最好用setter和getter。
为了确保你收到此通知更改变量引用的字符串,你可以这样做:
var str_obj = (function() {
var s = "my string";
return {
getString: function() {
return s;
},
setString: function(new_s) {
s = new_s;
alert("s changed!");
}
};
})();
alert(str_obj.getString()); // alerts "my string"
str_obj.setString("new string"); // alerts "s changed!"
alert(str_obj.getString()); // alerts "new string"
是的,这是一个*更好的方法。 – bobbymcr
让我们假设它是一个String对象......我怎样才能做到这一点? (__s = new String(); __) – ninov
@ninov - 我不明白你的问题。 'var s = new String(“aaa”);'工作得很好。你还问什么? – jfriend00