资讯专栏INFORMATION COLUMN

JS-原型及其作用

ysl_unh / 3468人阅读

摘要:指向一个对象,当函数作为构造函数时,则起到类似的作用。二如何理解原型和原型链我们创建的每个函数都有一个属性,这个属性是一个指向原型对象指针,原型对象里包含着所有实例共享的属性和方法。同时原型对象里也有一个指回了其对应的构造函数。

一、如何理解面向对象
面向对象的语言有一个标志,即拥有类的概念,它可以抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装、继承、多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义JS中对象:无序属性的集合,其属性可以包含基本值、对象或者函数。可以简单理解为JS的对象是一组无序的值,其中的属性或方法都有一个名字,根据这个名字可以访问相映射的值(值可以是基本值/对象/方法)。

在类语言中,对象基于模板来创建,首先定义一个类作为对现实世界的抽象,然后由类来实例化对象;js(ES5)本身是没有class类型的,但是每个函数都有一个prototype属性。prototype指向一个对象,当函数作为构造函数时,prototype则起到类似class的作用。比如用原型模式创建对象,只需要在构造函数的原型上面定义属性和方法,那么所有实例都可以共享原型对象上的属性和方法,因为他们内部都有一个__proto__属性,指向了原型对象。

二、如何理解原型和原型链

我们创建的每个函数都有一个prototype属性,这个属性是一个指向原型对象指针,原型对象里包含着所有实例共享的属性和方法。同时原型对象里也有一个constructor指回了其对应的构造函数。
每个对象实例都会在其内部初始化一个__proto__属性,它是一个指向prototype(原型对象)的指针,当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么他就会通过__proto__prototype里找这个属性,这个prototype又会有自己的__proto__指向自己的原型对象, 于是就这样一直找下去,形成了原型链的概念。

原型链实现的是对属性的查找,一直顺着原型链查找到Object对象,如果没查到返回undefined,还有值得注意的一点就是,所有对象里的__proto__都是对原型对象的一个引用,而不是副本,所以当我们修改原型时,与之相关的对象也会继承这一改变。

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

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

相关文章

  • 2018年底前端面试总结

    摘要:主要是整理一些自己还记得的面试题。标注重点的是频繁出现的,也确实很重要的知识点。总之要深度理解举一反三逻辑清晰表达流畅。以上,仅供参考。 主要是整理一些自己还记得的面试题。很多题目会根据项目内容提问,现在只记得一些比较常规的问题,后面想起来会做一些补充。标注重点的是频繁出现的,也确实很重要的知识点。 css 盒子模型:ie与其他浏览器的区别,如何改变盒子模型 图形:实现扇形/圆环/梯...

    妤锋シ 评论0 收藏0
  • 2018年底前端面试总结

    摘要:主要是整理一些自己还记得的面试题。标注重点的是频繁出现的,也确实很重要的知识点。总之要深度理解举一反三逻辑清晰表达流畅。以上,仅供参考。 主要是整理一些自己还记得的面试题。很多题目会根据项目内容提问,现在只记得一些比较常规的问题,后面想起来会做一些补充。标注重点的是频繁出现的,也确实很重要的知识点。 css 盒子模型:ie与其他浏览器的区别,如何改变盒子模型 图形:实现扇形/圆环/梯...

    youkede 评论0 收藏0
  • 2018年底前端面试总结

    摘要:主要是整理一些自己还记得的面试题。标注重点的是频繁出现的,也确实很重要的知识点。总之要深度理解举一反三逻辑清晰表达流畅。以上,仅供参考。 主要是整理一些自己还记得的面试题。很多题目会根据项目内容提问,现在只记得一些比较常规的问题,后面想起来会做一些补充。标注重点的是频繁出现的,也确实很重要的知识点。 css 盒子模型:ie与其他浏览器的区别,如何改变盒子模型 图形:实现扇形/圆环/梯...

    Anchorer 评论0 收藏0
  • JS创建对象模式及其对象原型链探究(三):构造函数模式

    摘要:创建对象与工厂模式的区别没有显示地创建对象直接将方法和属性付给了对象没有语句构造函数应该始终以一个大写字母开头。创建构造函数的实例,必须使用操作符。 构造函数模式 ECMAScript中的构造函数可用来创建特定类型的对象,像Object和Array这样的原生构造函数。也可以创建自定义的构造函数,从而定义自定义对象类型的属性和方法。 1.创建对象 function Person(name...

    Martin91 评论0 收藏0
  • JavaScript的数据类型及其检测

    摘要:值的比较只进行值的比较会进行数据类型的转换。只要在当前实例的原型链上,我们用其检测出来的结果都是。但检测与不一样,还可以处理基本数据类型的检测。 showImg(https://segmentfault.com/img/remote/1460000016733921); 一、JavaScript有几种类型的值? Javascript有两种数据类型,分别是基本数据类型和引用数据类型。其中...

    starsfun 评论0 收藏0

发表评论

0条评论

ysl_unh

|高级讲师

TA的文章

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