稳扎稳打JS——“继承”

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中的函数,因此所有对象都可以使用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏别先生

JAVA编程中的类和对象

1:初学JAVA,都知道JAVA是面向对象的编程。笔者这节开始说说类和对象。(实例仅供参考,如若复制粘贴记得修改包名和类名,避免出错) 学习JAVA的快捷键,A...

18610
来自专栏李家的小酒馆

Spring面试题

什么是Spring Spring是一个轻量级的容器,他实现了IOC和非侵入的框架,并提供了AOP的实现方式,提供了持久层事务的支持,其让java开发模块化,并且...

3710
来自专栏码云1024

JAVA 面向对象

4276
来自专栏互联网杂技

安静100分钟理解js面向对象

<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> </head>...

3258
来自专栏深度学习计算机视觉

里式替换原则(LSP)

讲继承 所有引用父类的地方都必须可以透明的使用其子类对象 几个原则: 1、子类必须完全实现父类的方法 2、子类可以有自己的个性 3、覆盖或实现父类的方...

34312
来自专栏待你如初见

Day08

1103
来自专栏blackheart的专栏

[C#1] 11-接口

接口与继承 CLR规定一个类型只能有一个基类型,这种继承成为单继承; 接口继承是指一个类型继承的是接口中的方法签名,而非方法实现,通常称为实现接口; 接口仅仅是...

1919
来自专栏GreenLeaves

C# 获取所有对象的字符串表示一ToString方法

应用程序开发过程中经常需要获取对象的字符串表示.Object类中定义了一个ToString的虚方法.所以在任何类型的实例上都能调用该方法.

351
来自专栏Java技术栈

Java趣味分享:try/finally

考虑以下四个测试方法,它们会输出什么? public class Test { public static void main(String[] arg...

3224
来自专栏开发之途

重拾Java(8)-反射

2027

扫码关注云+社区