资讯专栏INFORMATION COLUMN

总结javascript基础概念(三):js对象原型链

yzd / 1833人阅读

摘要:执行构造函数的一步说明对象可以通过函数来创建。是最顶级的构造函数,对象里面,就有好几个其他属性。构造函数与普通函数并没有区别,只是调用方式不同。

主要问题:
1、构造函数和普通函数有区别么?什么区别?
2、prototype和__proto__有什么不同?
3、instanceof的作用机制,为什么有限制?
4、ES6的相关方法,Class继承原理?

三、对象与原型

(一)、数据类型
Js共有6种数据类型:

5种基本数据类型 undefined,null,string,number,Boolean
1种复杂数据类型 Object

Object 数据类型可以分为两种:

函数(包括各种原生、自定义的构造函数):
    Object(),Function(),Array(),Date(),,,
对象实例(由函数创建的) {,,},[,,]...

(二)、创建对象

很简单的一段代码,我们来看看这个new究竟做了什么?我们可以把new的过程拆分成以下三步:
<1> var p={}; 也就是说,初始化一个对象p。
<2> p.__proto__=Person.prototype;
<3> Person.call(p); 也就是说构造p,也可以称之为初始化p。//执行构造函数的一步

说明:对象可以通过函数来创建。对象都是通过函数创建的。

每个函数都有一个prototype属性,指向一个对象,对象默认只有一个叫做constructor的属性,指向这个函数本身。

Object是最顶级的构造函数,prototype对象里面,就有好几个其他属性。

每个对象都有一个__proto__,可成为隐式原型。

自定义函数的prototype本质上就是普通对象实例,都是被Object创建,所以它的__proto__指向的就是Object.prototype。Object.prototype确实一个特例——它的__proto__指向的是null。

(三)、instanceof

Instanceof运算符的第一个变量是一个对象,暂时称为A;第二个变量一般是一个函数,暂时称为B。
Instanceof的判断队则是:沿着A的__proto__这条线来找,同时沿着B的prototype这条线来找,如果两条线能找到同一个引用,即同一个对象,那么就返回true。如果找到终点还未重合,则返回false。
所以instanceof 无法检测不同iframe创建的对象实例。

(四)、ES6新方法,新特性
Object.setPrototypeOf(),Object.getPrototypeOf()。新增加几个方法直接操作对象的__proto__属性,实现对象之间的联系。
Class的对象语法糖,模仿面向对象的语法,勉强提供了JS中的类的概念。然而并没有改变原型链的实质,只是更加隐藏的更深。

(五)、继承与委托
与纯净面向对象的语言不同,JS本质并没有类和实例的概念。JS中一切皆对象(除了少数基本类型),是真正的面向“对象”。
构造函数与普通函数并没有区别,只是调用方式不同。
与竭力模仿面向对象的方式来使用JS,使得代码继承逻辑十分复杂抽象。
相比之下,使用委托的思想,直接修改对象的__proto__属性指向,来访问委托对象上的属性和方法,在逻辑上更简洁直观。

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

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

相关文章

  • JS程序

    摘要:设计模式是以面向对象编程为基础的,的面向对象编程和传统的的面向对象编程有些差别,这让我一开始接触的时候感到十分痛苦,但是这只能靠自己慢慢积累慢慢思考。想继续了解设计模式必须要先搞懂面向对象编程,否则只会让你自己更痛苦。 JavaScript 中的构造函数 学习总结。知识只有分享才有存在的意义。 是时候替换你的 for 循环大法了~ 《小分享》JavaScript中数组的那些迭代方法~ ...

    melody_lql 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    李昌杰 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    Lyux 评论0 收藏0
  • SegmentFault 技术周刊 Vol.32 - 七夕将至,你的“对象”还好吗?

    摘要:很多情况下,通常一个人类,即创建了一个具体的对象。对象就是数据,对象本身不包含方法。类是相似对象的描述,称为类的定义,是该类对象的蓝图或原型。在中,对象通过对类的实体化形成的对象。一类的对象抽取出来。注意中,对象一定是通过类的实例化来的。 showImg(https://segmentfault.com/img/bVTJ3H?w=900&h=385); 马上就要到七夕了,离年底老妈老爸...

    AaronYuan 评论0 收藏0
  • JS前端面试总结

    摘要:春招季如何横扫面试核心考点基础版前端面试之路二基础整理的继承和的继承有什么区别的继承时通过或构造函数机制来实现。作用创建私有变量,减少全局变量,防止变量名污染。异步浏览器访问服务器请求,用户正常操作,浏览器后端进行请求。 春招季如何横扫 Javascript 面试核心考点(基础版)?前端面试之路二(javaScript基础整理) ES5的继承和ES6的继承有什么区别 ES5的继承时通过...

    ThinkSNS 评论0 收藏0

发表评论

0条评论

yzd

|高级讲师

TA的文章

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