资讯专栏INFORMATION COLUMN

Javascript学习之继承

CHENGKANG / 925人阅读

摘要:继承是面向对象编程语言中的一个重要的概念,继承可以使得子类具有父类的属性和方法或者重新定义追加属性和方法等。但是在中没有类的概念,是基于原型的语言,所以这就意味着对象可以直接从其他对象继承。

继承是面向对象编程语言中的一个重要的概念,继承可以使得子类具有父类的属性和方法或者重新定义、追加属性和方法等。但是在Javascript中没有的概念,是基于原型的语言,所以这就意味着对象可以直接从其他对象继承。

Ecmascript中描述了原型链的概念,并将原型链作为继承的主要方法,主要是想利用原型链让一个引用类型继承另一个引用类型的属性和方法。

构造函数、原型对象、实例之间的关系是:每个构造函数都有一个原型对象,每个原型对象中都有一个指针指向了该构造函数(constructor):

function A(){}
A.prototype.constructor == A //true

而实例中有一个内部的指针指向了原型对象([[prototype]]),在chrome,firefox等几款浏览器的JS引擎中加入了__proto__来访问原型对象[[prototype]]:

function B(){}
var b = new B();
b.__proto__ == B.prototype // true

当在实例对象中查找某一属性或方法的时候,会优先查找当前实例中是否包含该属性,如果未找到,便会在该实例的原型对象中查找,如果还未找到,就会再沿着原型对象中的内部原型指针继续往上层原型对象查找,层层递进,这样就构成了所谓的原型链。

function SuperType() {
  this.peoperty = true;
}

SuperType.prototype.getSuperValue = function() {
  return this.property;
}

function SubType() {
  this.subproperty = false;
}

SubType.prototype = new SuperType();
SubType.prototype.getSubValue = function() {
  return this.subproperty;
}

var instance = new SubType();
console.log(instance.getSuperValue());  //true

上面的代码中SubType继承了SuperType,这是通过将SuperType的实例赋给SubType.prototype实现的,本质是重写了SubType的原型对象。

在Javascript中,所有引用类型都默认继承了Object,一样都是通过原型链来继承的。所以所有函数的默认原型都是Object.prototype,因此默认原型内部都会有一个指向Object.prototype的指针,所以上面的代码的原型链图形的顶层应该还有一个Object:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/88228.html

相关文章

  • JavaScript习之对象原型及继承

    摘要:原型要掌握这三者之间的关系,通过代码例子记录一下自身属性的这里就是通过代码看一下做了什么默认情况下,将的所有属性包括继承的赋值给有什么东西呢自己的原型链,添加一个属性,用来指明对象的谁构造的自身全部属性,这边构建一个空对象原型,所以没有自有 原型 要掌握这三者之间的关系prototype,constructor,__proto__通过代码例子记录一下 function F() { ...

    妤锋シ 评论0 收藏0
  • JavaScript习之Object(下)new命令

    摘要:命令作用作用是执行构造函数,返回实例对象上面例子是自定义一个构造函数,其最大的特点就是首字母大写,用执行构造函数其中,在的执行下,代表了实例化后的对象,这个也就有属性注意点如果不用执行构造函数,那么指向的是全局有两种方式可以避免内部定义严格 new命令 new作用 作用是执行构造函数,返回实例对象 function F() { this.name = object } var ...

    Salamander 评论0 收藏0
  • JavaScript习之Object(下)相关方法

    摘要:它不区分该属性是对象自身的属性,还是继承的属性。那么我们要遍历对象所有属性,包括继承以及不可遍历的属性,用加原型遍历实现类似的用递归 Object静态方法 Object自身方法,必须由Object调用,实例对象并不能调用 Object.getPrototypeOf() 作用是获取目标对象的原型 function F() {}; var obj = new F(); console.lo...

    amuqiao 评论0 收藏0
  • JavaScript习之对象拷贝

    摘要:对象拷贝可遍历属性浅拷贝简单的浅拷贝可以用,对存取器定义的对象也试用深拷贝属性描述对象的拷贝这是个浅拷贝深拷贝不可遍历属性对象的拷贝例如拷贝获得共同的原型,与是兄弟关系说明也继承了原型,同级别简洁化版 对象拷贝 可遍历属性 浅拷贝 if(typeof Object.prototype.copy != function) { Object.prototype.copy = fun...

    Aklman 评论0 收藏0
  • Python模块文档习之抽象基类abc模块

    摘要:里面关于抽象类的相关介绍中并没有提供抽象类与抽象方法,但是提供了内置模块来模拟实现抽象类。主要类或函数这是用来生成抽象基础类的元类。继承方式中的抽象类模块定义了几个抽象类。 PEP里面关于抽象类的相关介绍:https://www.python.org/dev/pe...python中并没有提供抽象类与抽象方法,但是提供了内置模块abc(abstract base class)来模拟实现...

    lauren_liuling 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<