美文网首页
js 属性继承易错点

js 属性继承易错点

作者: 红叶1942 | 来源:发表于2019-03-21 11:55 被阅读0次

js世界中,原型继承是一个最普通的行为,但是这里面有一个易错点需要我们多加留意。

如下是创建了两个类Person, Student,我们分别在Person的构造函数和原型对象上设置了两个属性:country, gender。
随后定了一个Student类,其拥有自身属性age,同时继承了Person

first

function Person() {
  this.country = 'china'
}

Person.prototype.gender = 'man'

function Student() {
  this.age = 16
}

Student.prototype = new Person

const s = new Student

window.console.log(`s.age=${s.age},s.country=${s.country},s.gender=${s.gender}`); 

上面的console.log打印结果如下:

// s.age=16,s.country=china,s.gender=man

s实例拥有age,country,gender三个属性。

second

我们将person的原型对象属性country设置为japan

Person.prototype.country = 'japan'

我们将其打印

window.console.log(`s.age=${s.age},s.country=${s.country},s.gender=${s.gender}`);

得到的结果如下:

 // s.age=16,s.country=china,s.gender=man

我们看到country没有发生变化,并不等于japan

third

我们将Person的原型对象gender设置为girl

Person.prototype.gender = 'girl'

打印结果如下:

window.console.log(`s.age=${s.age},s.country=${s.country},s.gender=${s.gender}`); 
// s.age=16,s.country=china,s.gender=girl

结论

当Student继承Person实例后,其直接原型对象已经是实例,其祖父类才是Person的原型对象,所以当我们s.country时,其在实例p上已经寻找到了country,并不会去Person.prototype上寻找country,同理,s.gender发生了变化是因为在前两个对象没有找到gender属性,因此大家在用的时候,已定需要注意这一点

相关文章

  • js 属性继承易错点

    在js世界中,原型继承是一个最普通的行为,但是这里面有一个易错点需要我们多加留意。 如下是创建了两个类Person...

  • JS高级 03

    JS实现继承的方式 1.属性拷贝 2.原型式继承 3.原型链继承 4.借用构造函数继承|伪对象继承|经典点继承 5...

  • Js易错点梳理

    前言 本文是学习JavaScript过程中收集与整理的一些易错知识点,将分别从变量作用域,类型比较,this指向,...

  • JS里的继承

    什么是继承继承的原理如何完成JS的继承? 什么是继承 继承就是子类拥有父类的各种属性和方法那什么是类?这里的JS的...

  • js一些技巧.md

    js中的constructor和prototype 组合继承与寄生继承 组合继承 可以继承实例属性和方法,也可以继...

  • JS汇总---面向对象&数组

    面向对象 js原型链的继承 静态属性怎么继承 js原型链以及特点 面向对象有哪几个特点 封装,继承,多态 对象的继...

  • js继承与属性

    相关知识点链接与参考链接:一篇文章理解JS继承——原型链/构造函数/组合/原型式/寄生式/寄生组合/Class e...

  • 面向对象继承复习

    js基础的面向对象的继承 构造函数继承 这种方法的缺陷是只会继承构造函数上的实例属性,并不会继承原型对象上的属性,...

  • 继承prototype对象

    js的继承并非是 由谁构造出来的便继承谁自身上的属性,需要先把这个理解了。那既然不是继承他自身上的属性,那继承哪的...

  • JS学习笔记之对象属性遍历

    属性类型 JS中,对象的属性包括两类:自身属性(实例属性)以及继承属性(原型属性)。在这两类属性中,又有可枚举属性...

网友评论

      本文标题:js 属性继承易错点

      本文链接:https://www.haomeiwen.com/subject/jwkqvqtx.html