稳扎稳打JS——“继承”

来源:互联网 发布:咸鱼卖家申请淘宝介入 编辑:程序博客网 时间:2024/06/06 06:31

JS使用原型链实现“继承”

  • JS是“基于对象”的语言,因此没有继承。但可以使用JS的特性实现“继承”——原型链。

  • JS使用_proto_属性构造原型链,如
    p._proto_ ——> Perosn.prototype
    Perosn.prototype._proto_ ——> Object.prototype
    Person._proto_ ——> Function.prototype
    Function.prototype._proto_ ——> Object.prototype

  • 若当前对象中没有要访问的属性,JS就会自动沿着原型链向上查找,若在某一个对象的prototype中找到相应的属性,则访问它;若直到原型链顶端也没找到,则返回undifined。

//定义构造函数Personvar Person = function(name, age){    this.name = name;    this.age = age;}Person.prototype.school = "NJUPT";
var p = new Person("chaimm",23);p.school;

当访问p.school时,JS会首先在对象p的属性中查找,若不存在,则通过_proto_属性向上查找,当发现Person.prototype属性中存在school时,则查找成功。否则,继续沿着原型链向上查找。

  • 覆盖“父类”属性
var p = new Person("chaimm",23);p.school = "NJU";alert(p.school);

按照原型链查找次序,首先从当前对象的属性域查找,若找到school,则输出结果。从而实现面向对象中继承的效果。

  • 为“父类”添加新的属性
Person.prototype.hobby = "LOL";

可以为任何“父类”添加任何属性。

  • 使用hasOwnProperty函数可判断某属性是否是本对象的属性
for(item in p){    if(p.hasOwnProperty(item)){        console.log(item);    }}

hasOwnProperty是Object.prototype中的函数,因此所有对象都可以使用。

5 3
原创粉丝点击