【问题标题】:Proper way of assigning to __proto__ property分配给 __proto__ 属性的正确方法
【发布时间】:2010-12-10 15:08:42
【问题描述】:

我有一些从 JSON 反序列化的对象,我想为其分配一个新原型,以便提供各种 getter 和 setter 函数。这样做的明显方法(如this question 中所述)是设置

myJsonObj.__proto__ = { function1: /* ... */, function2: /* ... */ };

但是,作为 MDC helpfully points out__proto__ 属性是非标准的且已弃用。是否有任何符合标准的方式(对于“标准”的某些定义)来实现相同的效果,而无需创建大量新的包装器对象?

【问题讨论】:

  • 您链接到的文档建议您“改用 Object.getPrototypeOf()”(getPrototypeOf())。所以是这样的:var proto = myJsonObj.getPrototypeOf(); proto.function1 = /*whatever*/; proto.function2=/*whatever*/;
  • Lee,如果我没记错的话,调用Object.getPrototypeOf(myJsonObj) 会得到Object.prototype(因为myJsonObj 没有任何其他构造函数)。这意味着按照您的建议,我将修改Object(非常糟糕),而不是将一个类注入myJsonObj

标签: javascript json prototype


【解决方案1】:

没有符合标准的方法可以在创建对象后更改其原型。 在从 JSON 解析时,有一种符合标准的方法可以使用您想要的任何原型创建对象。

来自http://www.json.org/js.html

可选的 reviver 参数是 将为每个调用的函数 各个层面的关键和价值 最后结果。每个值将是 被复活者的结果所取代 功能。这可以用来改造 通用对象转化为实例 伪类,或转换日期 字符串转换为 Date 对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 2017-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多