Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/412.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript JS原型链_Javascript_Inheritance - Fatal编程技术网

Javascript JS原型链

Javascript JS原型链,javascript,inheritance,Javascript,Inheritance,已解决 在最底层分配原型覆盖了我以前的声明。感谢Guffa的快速回答 我一直在四处浏览,找到了一个很好的答案,mods,如果这是一个末日,我很抱歉 遵守守则。。 我有三个函数,分别是1、2和3。 我想从两个继承三个,从一个继承两个。三的原型应该一直延伸到一,它确实做到了。 当我在三个实例中时,我可以从一个调用方法。但我无法从两个调用方法 这里有一个例子 function one () { this.version = 1; }; one.prototype.one = function

已解决

在最底层分配原型覆盖了我以前的声明。感谢Guffa的快速回答


我一直在四处浏览,找到了一个很好的答案,mods,如果这是一个末日,我很抱歉

遵守守则。。 我有三个函数,分别是1、2和3。 我想从两个继承三个,从一个继承两个。三的原型应该一直延伸到一,它确实做到了。 当我在三个实例中时,我可以从一个调用方法。但我无法从两个调用方法

这里有一个例子

function one () {
  this.version = 1;
};

one.prototype.one = function () {
  return 'I live on the one class';
};

function two () { // extends one
  this.version = 2;
};

two.prototype.two = function () {
  return 'I live on the two class';
};

function three () { // extends two
  this.version = 3;
};

three.prototype.three = function () {
  return 'I live on the three class';
};

two.prototype = Object.create(one.prototype);
three.prototype = Object.create(two.prototype);

var x = new three();

x.one // -> 'I live on the one class!'
x.two // -> undefined
x.three // -> undefined
当我调用x.one时,我得到了“我生活在一个类上”的预期输出。 但是x.2是未定义的。 当我查看原型链时,在two的链上根本没有方法/属性。只有从一个原型是可访问的

我的脑子在哭

编辑 我还没有试过x.3,但它也没有定义。也许我继承的方式是覆盖原型而不是共享?
虽然如果这是个问题,我觉得我可以得到两个而不是一个。我不确定为什么我有权访问根类,但中间没有,甚至在调用的实例上也没有。就好像三只不过是一只的参考。

在添加了方法之后,您正在替换
two
twree
的原型。原型链工作正常,但是替换后,
两个
三个
方法不在原型中

在向原型添加方法之前替换原型:

功能一(){
这个版本=1;
};
one.prototype.one=函数(){
返回“我靠一个班级生活”;
};
函数2(){//扩展了函数1
这个版本=2;
};
2.prototype=Object.create(1.prototype);
two.prototype.two=函数(){
返回“我住在两个班上”;
};
函数三(){//扩展了函数二
这个版本=3;
};
3.prototype=Object.create(2.prototype);
三.原型.三=功能(){
返回“我住在三等舱”;
};
var x=新的三个();
//在代码段中显示值
document.write(x.one()+“
”);//->我住在一班的教室里
document.write(x.two()我住在两个类“
上,看在上帝的份上,请不要在示例中使用document.write()。正是这些事情让学校变得如此糟糕。我们基本上都把它扔掉了,别再把它带回来了:是的,这很有道理。我基本上是在他们有机会看到日光之前擦除原型。其中一个是可访问的,因为我从未重新分配过它的原型。太好了,非常感谢。