美文网首页
js原型和继承

js原型和继承

作者: 小伙儿_0c3c | 来源:发表于2018-03-01 17:04 被阅读0次

说到原型就不得不说构造函数,js一切皆对象,但分为普通对象和函数对象,构造函数就属于函数对象,所谓的原型和继承也是在函数对象下实现的

了解原型与原型链需要知道的三个构造函数属性(prototype, __proto__, constructor)

1. prototype、__proto__

prototype:原型是函数类型对象的一个自带属性'prototype',这个属性其实也是一个对象,有自己的属性和方法,通过原型可以实现对象的属性继承,null和undefined没有原型和原型链。

__proto__: “prototype”作为对象的内部属性,是不能被直接访问的,Firefox和Chrome中提供了__proto__这个非标准(不是所有浏览器都支持)       的访问器(ECMA引入了标准对象原型访问器”Object.getPrototype(object)”)。

对象的原型链

那么一个对象的[[prototype]]属性究竟怎么决定呢?这是由构造该对象的方法决定的。据我所知有三种构造一个对象的方法:

然而虽然说[[prototype]]是一个隐藏属性,但很多浏览器都给每一个对象提供.__proto__这一属性,这个属性就是上文反复提到的该对象的[[prototype]]。由于这个属性不标准,因此一般不提倡使用。ES5中用Object.getPrototypeOf函数获得一个对象的[[prototype]]。ES6中,使用Object.setPrototypeOf可以直接修改一个对象的[[prototype]]

2. 在JavaScript的原型对象中,还包含一个”constructor”属性,这个属性对应当前对象原型的实例的构造函数。

object.constructor指向object的构造函数,而构造函数的constructor指向的也是自己本身,所以object.constructor.constructor........。最后还是指向的是object的构造函数本身,

constructor属性不影响任何JavaScript的内部属性。instanceof检测对象的原型链,通常你是无法修改的(不过某些引擎通过私有的__proto__属性暴露出来)。constructor其实没有什么用处,只是JavaScript语言设计的历史遗留物。由于constructor属性是可以变更的,所以未必真的指向对象的构造函数,只是一个提示。不过,从编程习惯上,我们应该尽量让对象的constructor指向其构造函数,以维持这个惯例。

相关文章

  • 前端开发必须知道的JS(一) 原型和继承(转载)

    前端开发必须知道的JS(一) 原型和继承 原型和闭包是Js语言的难点,此文主要讲原型及原型实现的继承,在(二)中会...

  • JavaScript如何实现继承?

    JS 中的继承主要分为两种:原型继承和非原型继承,非原型继承又分为寄生方式继承、借用或伪造构造函数方式继承、组合方...

  • 2019-03-25 继承

    js中通过原型来实现继承 组合继承:原型继承+借用构造函数继承

  • js实现继承的几种方式

    js实现继承有几种方式,这里我们主要探讨 原型链继承 构造继承 组合继承(原型链和构造继承组合到一块,使用原型链实...

  • js基础之实现继承的几种方式

    js 实现继承的方式有: 原型链继承; 构造函数继承; 组合继承(原型链继承 + 构造函数继承)(最常用);(原型...

  • js基础(三)

    js基础 原型链和原型对象 ... ... js没有继承原型对象prototype通常用来添加公共的属性或行为且只...

  • js继承

    js继承js 继承-简书 原型链实现集继承 上面的代码实现原型链继承最重要的son.prototype=new f...

  • js原型和继承

    说到原型就不得不说构造函数,js一切皆对象,但分为普通对象和函数对象,构造函数就属于函数对象,所谓的原型和继承也是...

  • js原型和继承

    原型 一、原型的概念 执⾏构造函数代码时, js系统会给这个构造函数创建⼀个原型对象,构造函数中也包含⼀个prot...

  • js原型和继承

    https://www.jianshu.com/p/dee9f8b14771

网友评论

      本文标题:js原型和继承

      本文链接:https://www.haomeiwen.com/subject/mspmxftx.html