0

我正在努力设置原型的实例。我有这样的事情:

function Course() {
    // Some stuff
}

Course.prototype.MyMethod = function() {
    // Do stuff
}

现在,如果我创建一个New Course(),一切正常,但是,我从JSON. 所以我想做的是:

data.forEach(function(courseFromJSON) {
    courseFromJSON.prototype = Course.prototype;
    courseFromJSON.prototype = new Course(); // Doesn't work either
});

但是我的课程从来没有MyMethod为他们设置方法。也不设置courseFromJSON.prototypenew Course()。我一直在浏览 Douglas Crockford 的视频,但似乎无法正确理解。我究竟做错了什么?

谢谢。

4

1 回答 1

1

您的代码不起作用,因为您无法更改已创建对象的原型,或者至少不能通过该prototype属性。

存在两种选择:

  1. 使用 internal__proto__属性,但不建议这样做,因为它是非标准属性。

  2. 使用该setPrototypeOf(Object, prototype)函数,这是推荐的,将在 ES6 中标准化。

或者更好的是,使用从以下文档链接中获取的代码片段setPrototypeOf()

Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
    obj.__proto__ = proto;
    return obj; 
}
于 2013-10-14T09:25:55.073 回答