无法在javascript中使用prototype =设置实例原型

时间:2013-10-14 08:42:58

标签: javascript prototype ecmascript-5 prototypal-inheritance

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

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.prototype设置为new Course()。我一直在看道格拉斯克罗克福德的视频,但似乎无法做到正确。我做错了什么?

感谢。

1 个答案:

答案 0 :(得分:1)

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

存在两种选择:

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

  2. 使用setPrototypeOf(Object, prototype)功能,建议使用此功能,并在ES6中进行标准化。

  3. 甚至更好,请使用setPrototypeOf()上的文档链接中的代码段:

    Object.setPrototypeOf = Object.setPrototypeOf || function (obj, proto) {
        obj.__proto__ = proto;
        return obj; 
    }