JavaScript 原型链变化,为什么导致变量跟着变化?
黄舟
黄舟 2017-04-11 13:24:34
0
3
202

不知为啥,当代码执行了倒数第二行 C.prototype = b; 之后,变量 b 的值也随之改变了,第一次输出 B {y: 2},第二次输出 A {y: 2},请 JavaScript 大牛帮忙解答一下。代码如下:

(function() {

  function A(x) {
    this.x = x;
  }

  function B(y) {
    this.y = y;
  }

  function C(z) {
    this.z = z;
  }

  var a = new A(1);
  B.prototype = a;

  var b = new B(2);
  console.log(b);    // B {y: 2}

  C.prototype = b;   
  console.log(b);    // A {y: 2}

}());

下图为 Chrome 控制台调试过程:

原问题为:请问chrome中console.log打印的对象名是指向哪里?

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
小葫芦

感觉像 chrome的bug Safari没有这个问题

左手右手慢动作

b并没有变

(function() {

  function A(x) {
    this.x = x;
  }

  function B(y) {
    this.y = y;
  }

  function C(z) {
    this.z = z;
  }

  var a = new A(1);
  B.prototype = a;
  //B.prototype.constructor = B; 重置constructor就可以了

  var b = new B(2);
  console.log(b);    // B {y: 2}
  
  var c = b;

  C.prototype = b;   
  
  console.log(b);    // A {y: 2}
  console.log(c === b) // true

}());
伊谢尔伦

这牵扯到原型的继承,在原型链上就是这样继承的,这是为了让对象可以通过原型链继承相同的属性,javascript在原有的继承上又引入构造函数可以一起使用,可以解决此类问题,另外java增添了类继承,其实就是给javascrippt的一个语法糖,他本质就是构造函数和原型继承的结合。
建议可以找本书看看有关原型继承的例子。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!