【学习笔记60】JavaScript原型链的理解

一、万物皆对象1、对象概念2、说明
const arr = [1, 2, 3];const arr1 = [1, 2, 3, 4];const arr2 = [1, 2];
const fn = () => { console.log(1) }const fn2 = () => { console.log(2) }const fn3 = () => { console.log(3) }
如果一个数据[]那么他就是Array,这个对象中的某一个个体如果一个数据{}那么他就是Object,这个对象中的某一个个体如果一个数据function(){},那么他就是 Function 这个对象中的某一个个体
二、原型链三、原型链查找对象的某一个属性先在对象内部开始查找, 找到直接使用, 然后停止查找如果没有找到, 会找对象的obj., 如果找到直接使用, 然后停止查找如果这里没找到, 会继续去对象的obj.查找, 找到直接使用, 然后停止查找如果还是没找到, 会继续向上查找…直到找到顶层作用对象:., 找到就是用, 找不到
function Person (name) {this.name = name;}Person.prototype.sayHi = function () {console.log(100);}const p = new Person('QF001');console.log(p);
问题1: p的指向谁?p是的实例化对象指向自身构造函数的原型p. === .
function Person(name) {this.name = name;}Person.prototype.sayHi = function () {console.log(100);}const p = new Person('QF001');console.log(p.__proto__);// {sayHi: ?, constructor: ?}console.log(Person.prototype);// {sayHi: ?, constructor: ?}console.log(p.__proto__ === Person.prototype);

【学习笔记60】JavaScript原型链的理解

文章插图
问题2:的指向谁?是构造函数, 本质上函数只要是一个函数, 他就是的实例.指向了他的构造函数的原型, 构造函数是, 那么构造函数的原型.. === .
function Person (name) {this.name = name;}Person.prototype.sayHi = function () {console.log(100);}-const p = new Person('QF001');console.log(Person.__proto__ );// ? () { [native code] }console.log( Function.prototype);// ? () { [native code] }console.log(Person.__proto__ === Function.prototype);
问题3: . 的 proto 指向谁?.其实就是构造函数的原型对象, 本质上就是对象只要是一个对象, 他就是的实例..指向了 他的构造函数的原型, 构造函数, 那么构造函数的原型.`..proto === .=====
function Person (name) {this.name = name;}Person.prototype.sayHi = function () {console.log(100);}const p = new Person('QF001');// {constructor: ?, __defineGetter__: ?, __defineSetter__: ?, hasOwnProperty: ?, __lookupGetter__: ?, …}console.log(Person.prototype.__proto__);console.log(Object.prototype);console.log(Person.prototype.__proto__ === Object.prototype);
问题4: 的指向谁?是构造函数, 本质上就是一个函数只要是一个函数, 他就是的实例.指向了他的构造函数的原型, 构造函数, 那么构造函数的原型 .. === .
function Person (name) {this.name = name;}Person.prototype.sayHi = function () {console.log(100);}const p = new Person('QF001');console.log(Function.__proto__);// ? () { [native code] }console.log(Function.prototype);// ? () { [native code] }console.log(Function.__proto__ === Function.prototype);
问题5: . 的 proto 指向了谁?.其实就是 构造函数的原型对象, 本质上是对象只要是一个对象, 他就是的实例..指向了他的构造函数的原型, 构造函数, 那么构造函数的原型... === .
function Person (name) {this.name = name;}Person.prototype.sayHi = function () {console.log(100);}const p = new Person('QF001');// {constructor: ?, __defineGetter__: ?, __defineSetter__: ?, hasOwnProperty: ?, __lookupGetter__: ?, …}console.log(Function.prototype.__proto__);console.log(Object.prototype);console.log(Function.prototype.__proto__ === Object.prototype);