没有原型的Javascript继承

Javascript inheritence without prototype

本文关键字:Javascript 继承 原型      更新时间:2024-06-25

请参阅-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条评论的行,它们不同吗
  2. 为什么say不被调用,并且在使用任何注释行时出错(请取消注释)

    b.prototype = Object.create(a);
    b.prototype = a;
    
  3. 快速添加问题-如果"b"使用b.prototype=Object.create(a.prototype)从"a"继承,那么b的实例是否无法调用未在a的原型上定义的任何a方法?请参阅-jsfiddle.net/sf4axun/3

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

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

另一件事是,这两种说法都是错误的。

应该是

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

使得CCD_ 2属性将由b.继承

另一种方法是

b.prototype = a.prototype

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

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

b.prototype = new a();

DEMO

当您使用Object.create时,原型会被遍历,但您的构造函数永远不会运行。这是原始A"类"中的代码没有实际执行。为了让b1既有发言权又有发言权,你会做

b.prototype = new a();