代码之家  ›  专栏  ›  技术社区  ›  vol7ron

如何在原型函数中设置对象属性(范围问题)?

  •  0
  • vol7ron  · 技术社区  · 15 年前

    这是件小事,我已经忘了。 有可能是重复的-我搜索了一点,发现相似,但找不到简洁。

       String.prototype.test = function(){this.bar = this.length + 2;}
    
       var str = "foo";
       str.test();
    
       console.log(str);                         // foo
       console.log(str.bar);                     // undefined
    

    很确定这和 this 被困在封闭中。

    1 回复  |  直到 15 年前
        1
  •  0
  •   Erik    15 年前

    var str = new String("Foo");
    

    参见以下示例: http://jsbin.com/odozo3/edit

        2
  •  1
  •   Andre Lopes    6 年前

    原因是字符串文字不是对象。但是,在幕后,当您使用文本调用string函数时,比如“foo”.toUpperCase(),javascript运行时所做的就是用新字符串(“foo”)包装字符串。不管怎样,这只发生在您调用一些预构建字符串函数时,而不是在您使用prototype创建一个新函数时。

    编辑:你只能重写一个对象的原型。这就是为什么新的关键字是必要的。