您的位置:首页 > Web前端 > JavaScript

稳扎稳打JS——“继承”

2016-09-15 17:01 162 查看

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中的函数,因此所有对象都可以使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: