如何在方法中获取变量名,我在String()的原型中定义了?
String.prototype.foobar = function() {alert(/*something here...*/);};
var s="I'm just a stupid string!";
s.foobar();
应该返回包含“s”的警告......
我该如何管理?
问候。
修改
您可以在此处下载此主题的结果:https://github.com/ninov/onChange
答案 0 :(得分:1)
“我想制作一种自定义事件,检查字符串是否更改”
那是不可能的。字符串是不可变的。
如果你想让函数提醒实际的变量名,那也是不可能的。如果您有String对象,则可以有几个引用同一对象的变量。它如何知道使用哪个名称?
您应该定义一个符合您需要的对象。最好带有制定者和吸气剂。
为了确保您收到引用该字符串的变量的更改通知,您可以这样做:
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"
答案 1 :(得分:0)
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以任何标准方式支持的东西。
如果这些都不是您实际要求的,请澄清您的问题。
答案 2 :(得分:0)
嗯,这确实有效。
如果您将该代码段更改为:
String.prototype.foobar = function() {alert(this);};
然后s.foobar();
会提醒"I'm just a stupid string!"
如果这对您不起作用,请说明您正在测试的引擎。
我担心无法获取原始变量名称。
答案 3 :(得分:0)
这是不可能的。它不应该是。
如果你真的想知道这个元数据,你应该考虑使用一个对象:
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!
}
但是你为什么要以编程方式知道变量名呢?