对JS原型(链)的理解和记忆(一)

主要把原型(链)这部分内容分以下三个部分理解和记忆,按以下记忆可能会更容易理解些:

一、两个对象;
二、两个属性;
三、一个特例;
四、两条链


两个对象

首先我把JS中的对象分为两种,一种是函数对象,一种是普通对象。
1、什么是函数对象?

    function F1( ){ };
    var f2 = function( ){ };
    var f3 = new Function("", ""){ }; 

2、什么是普通对象?

    var o1 = new F1( ); //理解为o1的父类是F1
    var o2 = { };
    var o3 = new Object( );

另记,Object 和 Function为函数对象。下文会用到上面的部分变量。

两个属性

  • prototype 属性
  • proto属性

1、作用
_proto_属性:

每个对象都有proto属性,它的作用就是寻找原型(链)的,有指向性。(有特例看第三个部分);

prototype 属性:

只有函数对象有prototype 属性,它就是原型,只是个普通对象(有特例),没有指向性。

2、与对象的关系
下面的内容会用到第一部分里的变量作为理解。
普通对象(只有_proto_属性)
proto属性

普通对象.proto === 函数对象.prototype,这是一个普通对象,没有指向性。
例子:
o1.proto === F1.prototype

函数对象.prototype.proto === Object.prototype
例子:
F1.prototype.proto === Object.prototype

最后Object.prototype._proto === null

函数对象(两个属性都有):
proto属性:

函数对象.proto === Function.prototype,特例这是一个函数对象。且没有prototype属性。

例子:
F1.proto === Function.prototype;
Object.proto === Function.prototype;
Function.proto === Function.prototype;

prototype属性

函数对象.prototype 是个普通对象,没有指向性,有proto属性。

一个特例

上文提过只要是prototype属性,就是一个普通对象,而Function.prototype就是一个特例,它是函数对象,而且没有prototype属性,即Function.prototype.prototype是undefine.

四、两条链

为便于理解原型链,我把它分为两条,分别是以普通对象开始和以函数对象开始的原型链。

第一条:
o1.proto === F1.prototype; F1.prototype.proto ===
Object.prototype; Object.prototype.proto === null;

第二条:
F1/Object/Function.proto === Function.prototype;
Function.prototype.proto == Object.prototype;
Object.prototype.proto === null;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值