如何在 String() 的原型中定义的方法中获取变量名?
String.prototype.foobar = function() {alert(/*something here...*/);};
var s="I'm just a stupid string!";
s.foobar();
应该返回一个包含“s”的警报...
我该如何管理?
问候。
编辑:
您可以在此处下载此主题的结果:https ://github.com/ninov/onChange
如何在 String() 的原型中定义的方法中获取变量名?
String.prototype.foobar = function() {alert(/*something here...*/);};
var s="I'm just a stupid string!";
s.foobar();
应该返回一个包含“s”的警报...
我该如何管理?
问候。
编辑:
您可以在此处下载此主题的结果:https ://github.com/ninov/onChange
“我想做一种自定义事件,检查字符串是否改变”
这不可能。字符串是不可变的。
如果你想让函数提醒实际的变量名,那也是不可能的。如果您有一个 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"
这是不可能的。它不应该是。
如果你真的想知道这个元数据,你应该考虑使用一个对象:
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!
}
但是为什么你想以编程方式知道变量名呢?
Javascript 具有字符串原语(不是真正的 javascript 对象)和具有方法的字符串对象。我假设字符串原语更有效,并且像您一样静态声明的字符串将默认为原语。在大多数情况下,Javascript 会在需要时自动将原语转换为对象。当我在 Chrome 中运行您的代码时,它会这样做并且我确实收到了警报。
如果你想确保它是一个对象,你可以像这样声明它:
String.prototype.foobar = function() {alert("fun");};
var s = new String("I'm just a stupid string!");
s.foobar();
有关此主题的更多信息,请参阅此处的“字符串原语和字符串对象之间的区别”部分。
如果您要做的是从 foobar() 方法中获取变量名,那么这不是 Javascript 以任何标准方式支持的东西。
如果这些都不是您真正要问的,请澄清您的问题。
嗯,这确实有效。
如果您将该片段更改为:
String.prototype.foobar = function() {alert(this);};
然后s.foobar();
会提醒"I'm just a stupid string!"
如果这对您不起作用,请说明您正在测试哪个引擎。
恐怕没有办法得到原来的变量名。