关于JS原型继承的思考

JavaScript是一种基于原型的语言,即使ES6引入了类(class)语法,本质上仍是语法糖。所有对象的父类是Object,实例化的对象__proto__指向构造函数的prototype。Function作为构造函数,自身也是对象,由Function创建。Function.prototype.__proto__最终指向Object.prototype,形成原型链。
摘要由CSDN通过智能技术生成
一.引用官方文档中的话:

JavaScript 是动态的,本身不提供一个 class 的实现。即便是在 ES2015/ES6 中引入了 class 关键字,但那也只是语法糖,JavaScript 仍然是基于原型的。

所以说,js还是和其他oop语言有些不同. 下面是我的思考:
1.Object是所有对象的父类
class Person{
    constructor() {
        
    }
}

let person = new Person();
//实例化对象的__proto__  等于 实例化对象的构造函数的prototype
console.log(person.__proto__ === Person.prototype);
//结果就是Object.prototype的值
console.log(person.__proto__.__proto__);
//因为已经到object这里了  既然到头了 所以为null
console.log(person.__proto__.__proto__.__proto__);
2.那构造函数也是对象啊,他是谁new 的?
class Person{
    constructor() {
        
    }
}
//结果为ƒ () { [native code] }
console.log(Person.__proto__);

3.但是Function本身也是对象,所以说new Function的还是Function
//结果为ƒ () { [native code] }
console.log(Function.__proto__);
4.Object也是函数 也是被Function new 出来的
//ƒ () { [native code] }
console.log(Object.__proto__);
5.一切对象的源头都是Object,所以Function.prototype.__proto__指向了Object.prototype
console.log(Function.prototype.__proto__);
最后 贴一张网上的图片,感谢作者

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值