原型继承:你可以链接Object.create吗?

rob*_*ett 6 javascript inheritance prototype object-create

我是原型继承的新手,所以我试图理解'正确'的方式.我以为我能做到这一点:

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

var tbase = {};

tbase.Tdata = function Tdata() {};

tbase.Tdata.prototype.say = function (data) {
    console.log(data);
};

var tData = new tbase.Tdata();

tbase.BicData = Object.create(tData);

tbase.BicData.prototype.say = function (data) {
    console.log("overridden: " + data)
};

tbase.BicData.prototype.shout = function (data, temp) {
    console.log("SHOUT: " + data + ", " + temp)
};

var test = new tbase.BicData();

tData.say("test1"); 
test.say("test2");
test.shout("test3", "hope");

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

var tbase = {};

tbase.Tdata = function Tdata() {};

tbase.Tdata.prototype.say = function (data) {
    console.log(data);
};

var tData = new tbase.Tdata();

tbase.BicData = Object.create(tData);

tbase.BicData.prototype.say = function (data) {
    console.log("overridden: " + data)
};

tbase.BicData.prototype.shout = function (data, temp) {
    console.log("SHOUT: " + data + ", " + temp)
};

var test = new tbase.BicData();

tData.say("test1"); 
test.say("test2");
test.shout("test3", "hope");
Run Code Online (Sandbox Code Playgroud)

但相反,我得到" tbase.BicData.prototype未定义 "

在Java中,我想要的是将Tdata作为样板"接口",将BicData作为其实现,然后从中实例化对象.

我哪里错了?

CMS*_*CMS 8

问题是tbase.BicDataobject(tbase.BicData = Object.create(tData);),prototype属性应该用在构造函数上.

利用这种Object.create方法,我会做这样的事情:

var tbase = {};

tbase.Tdata = {
  say : function (data) {
    console.log(data);
  }
};

tbase.BicData = Object.create(tbase.Tdata);

tbase.BicData.say = function (data) {
    console.log("overridden: " + data)
};

tbase.BicData.shout = function (data, temp) {
    console.log("SHOUT: " + data + ", " + temp)
};

var test = Object.create(tbase.BicData);
var tData = Object.create(tbase.Tdata);

tData.say("test1"); // test1
test.say("test2"); // overridden: test2
test.shout("test3", "hope"); // SHOUT: test3, hope
Run Code Online (Sandbox Code Playgroud)

  • +1我删除了我的答案,你是对的:) (3认同)