你能用javascript调用方法继承原型吗?

时间:2012-10-10 04:02:44

标签: javascript prototype

我知道你可以让一个javascript实例化对象继承constructer.prototype.__proto__ = otherConstructer.prototype的另一个构造函数的原型,但是你可以使用这样的call方法做同样的事情吗?:

function constructor () {
  otherConstructor.call(this);
}

1 个答案:

答案 0 :(得分:1)

不,原型不能被替换,除非引用对象本身并直接用__proto__属性替换它,而__ proto属性在所有实现中都不存在。看看这个示例代码:

function B() {
    this.someValue = "BBB";
}
B.prototype.testfunc = function() {
    console.log("Called from B: someValue =" + this.someValue);
}

function A() {
  this.someValue = "AAA";
  return B.call(this);
}
A.prototype.testfunc = function() {
    console.log("Called from A: someValue =" + this.someValue);
}

var test = new A();
test.testfunc();

// Will output "Called from A: someValue =BBB"

正如您所看到的,B构造函数正确调用,对象设置来自B而不是A,但是对象的原型仍来自A。当然,您可以替换个体功能:

test.testfunc = B.prototype.testfunc;
test.testfunc();

// Will output "Called from A: someValue =BBB"

如果您想详细解释原因,请查看this question的接受答案。

编辑:创建A对象时,与B.prototype无关。如果您更改了代码以便未定义A.prototype.testfunc,那么即使A构造函数调用B,但是调用test.testfunc()仍会导致未定义的异常。