我希望能够创建一个拥有它自身内在价值的对象。这样我就可以在表达式中使用它,就像它是一个常规变量一样。事实证明这很容易 - 我很想知道我是否遗漏了一些东西。它似乎只是确保对象包含一个方法" valueOf"。像这样:
var p = {
a: 12;
valueOf: function(){return this.a+12}
}
alert(p/3); // =8
包含" toString"这可能是一个好主意。方法也是。似乎正在发生的是,如果没有valueOf方法,对对象的引用会上升到原型链,直到它在Object上找到方法,它只返回" object Object"。通过提供本地方法,该方法可以返回任何内容。
它似乎适用于我尝试过的所有浏览器。
这是另一种提供类似getter功能的方法。但是好一点因为getter只能应用于对象的属性。这样您就可以使用对象本身。
你怎么看?这样安全吗?任何陷阱?答案 0 :(得分:0)
我开始使用这种模式,发现了一个问题。如果你创建一个像上面那样的对象,你必须猜测解释器将如何查看对象的引用。
例如,如果在算术表达式中使用P,它会调用对象的valueOf()方法来获取其值。但是当您尝试访问p的属性(如p.a)时,它会将p视为对象并按预期检索该属性。
相比之下,在getter中,当p上有吸气剂时访问p.a会首先运行吸气剂,然后尝试获取物品“a”。结果。完全不同,但很重要。
这一切都非常正确,似乎"猜测"正确地做什么。但是使用该模式确实依赖于了解这种行为,AFAIK没有记录在任何地方。