-1

如何在 String() 的原型中定义的方法中获取变量名?

String.prototype.foobar = function() {alert(/*something here...*/);};
var s="I'm just a stupid string!";
s.foobar();

应该返回一个包含“s”的警报...

我该如何管理?

问候。

编辑:

您可以在此处下载此主题的结果:https ://github.com/ninov/onChange

4

4 回答 4

1

“我想做一种自定义事件,检查字符串是否改变”

这不可能。字符串是不可变的。

如果你想让函数提醒实际的变量名,那也是不可能的。如果您有一个 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"
于 2011-11-27T21:25:00.757 回答
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!
}

但是为什么你想以编程方式知道变量名呢?

于 2011-11-27T20:50:28.790 回答
0

Javascript 具有字符串原语(不是真正的 javascript 对象)和具有方法的字符串对象。我假设字符串原语更有效,并且像您一样静态声明的字符串将默认为原语。在大多数情况下,Javascript 会在需要时自动将原语转换为对象。当我在 Chrome 中运行您的代码时,它会这样做并且我确实收到了警报。

如果你想确保它是一个对象,你可以像这样声明它:

String.prototype.foobar = function() {alert("fun");};
var s = new String("I'm just a stupid string!");
s.foobar();

有关此主题的更多信息,请参阅此处的“字符串原语和字符串对象之间的区别”部分。

如果您要做的是从 foobar() 方法中获取变量名,那么这不是 Javascript 以任何标准方式支持的东西。

如果这些都不是您真正要问的,请澄清您的问题。

于 2011-11-27T20:43:06.757 回答
0

嗯,这确实有效。

如果您将该片段更改为:

String.prototype.foobar = function() {alert(this);};

然后s.foobar();会提醒"I'm just a stupid string!"

如果这对您不起作用,请说明您正在测试哪个引擎。

恐怕没有办法得到原来的变量名。

于 2011-11-27T20:44:16.677 回答