稳扎稳打JS——“继承”

    xiaoxiao2022-08-06  44

    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。

    //定义构造函数Person var 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中的函数,因此所有对象都可以使用。

    转载请注明原文地址: https://ju.6miu.com/read-1132065.html
    最新回复(0)