原型链之Object,Function,__proto__,prototype

一、基础知识点

  1. javascript中,“函数”(方法)也是对象。
  2. 一切对象都有一个根源。它是Object.prototype。
  3. 根源之上再没有其他根源,Object.prototype.proto === null

注:省去proto的下划线

二、构造函数

通过new关键字可以用来创建特定类型的对象的函数;只要创建了一个新函数,每个函数在创建之后都会获得一个prototype的属性,这个属性指向函数的原型对象(原型对象在定义函数时同时被创建),此原型对象又有一个名为“constructor”的属性,反过来指向函数本身,达到一种循环指向。

function Person(){}
alert(Person.prototype.constructor===Person);//true

三、prototype

每个函数都有一个prototype属性,它是一个指向原型对象的指针,原型对象在定义函数时同时被创建,原型对象的用途是包含所有实例共享的属性和方法

function Person(){

}
//自定义原型对象的属性和方法
Person.prototype.name="Tom";
Person.prototype.sayName=function(){
 console.log(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom

四、proto

当调用构造函数创建一个新实例后,该实例的内部将包含一个指针proto,该指针指向创建它的构造函数的原型(prototype),大多数浏览器都支持proto

function Person(){
}
//自定义原型对象的属性和方法
Person.prototype.name="Tom";
Person.prototype.sayName=function(){
 console.log(this.name);
};
//原型对象中的所有属性和方法 都会自动被所有实例所共享
var person1=new Person();
var person2=new Person();
person1.sayName();//Tom
person2.sayName();//Tom
console.log(person1.__proto__===Person.prototype);//true

用一张图表示实例“构造函数”,“对象proto”和“函数prototype”的关系:
构造函数,__proto__和prototype
注:[[prototype]]就是proto

五、特例

Object和Function既是对象,又是函数,两者内部同时含有proto和prototype属性,他们关系较为复杂,以下做归纳。

Function.prototype指向”内置函数“。而Object.prototype指向”根源对象“

Object.__proto__ === Function.prototype //true
Object.__proto__ === Function.__proto__//true
Object.prototype === Function.prototype.__proto__ // true
//因此
Function instanceof Object //true
Object instanceof Function //true

x instanceof y,当y的原型对象在x的原型链之上,返回true,否则返回false;

关系图如下:

Function和Object

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 1

打赏作者

不要做切图仔

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值