JavaScript 高级 原型对象

本文详细探讨JavaScript中函数的prototype与对象的隐式原型__proto__,包括它们的作用、关系和原型链原理,以及如何通过实例和构造器进行判断。重点讲解原型链的本质和函数与对象间的创建关系。
摘要由CSDN通过智能技术生成

函数和原型 (function & prototype)

每一个函数都有一个属性 prototype,表示 "原型对象"

在 JS 中对象的产生是通过原型对象而来,每一个对象,都有一个原型对象。而原型对象上面也有一个自己的原型对象,一层一层向上找,最终会到达 null

对象和隐式原型 (object & __ proto __)

每一个实例对象都有一个 __ proto __ 属性称为 隐式原型,指向创建该对象的构造函数的 prototype。这个属性本身也是对象。

  • 函数的属性 prototype

  • 对象的属性 __proto__

let arr = [];
console.log(arr.__proto__);
console.log(Array.prototype);
console.log(arr.__proto__ == Array.prototype); // true

原型和隐式原型 (prototype & __ proto __)

每个对象身上的 __ proto __属性都指向创建该对象的函数的prototype

console.log(arr.__proto__ === Array.prototype);     // true

原型和构造器(prototype & constructor)

每一个函数的 prototype 上有 constructor 属性,指向原型所在的类。

原型链 (prototype chain)

找公用的属性。方法属于特殊的属性,属性所对应的值是一个函数。

原型链:从实例本身 --> 创建该实例对象的构造函数原型 --> Object.prototype

  • 本质上来说,所有 function 都可以看作是由 new Function()生成的,所有通过 new Function() 创建的对象叫做 函数对象

  • 所有对象都是由函数对象创建的。

  • 函数属于对象,函数可以创建对象。

函数和对象间的关系(function & obj)

instanceof 用于判断一个对象 是否是 一个构造函数的 实例对象。原理就是利用了原型链。注意,instanceof 只能用于复杂数据类型。

所有对象 instanceof Object 都得到 true,因为 Object 在原型链的上端。

语法:obj instanceof class

function Student(){}
let obj = new Student();
console.log(obj instanceof Student);    // true
​
function Fn() {}
let obj = {};
console.log(obj instanceof Fn); // false
​
function fn(){}
console.log(fn instanceof Object);  // true
console.log(fn instanceof Function);    // true

总结

1、原型:每个函数都有一个 prototype 属性叫做原型

2、隐式原型:每个对象都有一个 proto 属性叫做隐式原型

3、所有对象本质上都可以看作是通过 Object 创建的

4、所有函数本质上都可以看作是通过 Function 创建的

5、判断 obj 是不是一个构造函数的实例对象 xxx.instanceof function

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值