没有原型的Javascript继承

时间:2015-02-28 06:09:34

标签: javascript inheritance

请参阅 - http://jsfiddle.net/sf4oaxun/

function a() {
    this.say = function () {
        alert("hello");
    };
}

a.prototype.what = function () {
    alert("234234");
};

function b() {}

//b.prototype = Object.create(a);
//b.prototype = a;

var b1 = new b();

b1.say();
  1. 这两条评论的线条,它们有什么不同?
  2. 为什么说没有被调用,并且在使用任何一条注释行时都会出错(请取消注释)

    b.prototype = Object.create(a);
    b.prototype = a;
    
  3. 快速提问 - 如果'b'使用b.prototype = Object.create(a.prototype)从'a'继承,那么b的实例将无法调用任何未定义的方法一个原型?请参考 - jsfiddle.net/sf4oaxun/3

2 个答案:

答案 0 :(得分:1)

say仅在函数a的构造函数中可用。它不会被继承。

这就是为什么b1.say()不可用的原因。

另一件事,这两个陈述都是错误的。

应该是

b.prototype = Object.create(a.prototype)

以便b。

继承what属性

另一种做法是

b.prototype = a.prototype

但在这种情况下,对b.prototype的任何更改都会影响a.prototype

如果你想继承构造函数属性,那么

b.prototype = new a();

<强> DEMO

答案 1 :(得分:0)

当您使用Object.create时,原型会被覆盖,但您的构造函数永远不会运行。这是原A&#34;类&#34;中的代码。没有正在执行。要让b1同时说出什么,你会做什么

b.prototype = new a();