JS的魔法三角:constructor、prototype与__proto__
创作时间:
作者:
@小白创作中心
JS的魔法三角:constructor、prototype与__proto__
引用
CSDN
1.
https://m.blog.csdn.net/Cwayhome/article/details/144165080
在JavaScript中,constructor
、prototype
和__proto__
是与对象创建和继承机制紧密相关的三个核心概念。理解它们之间的关系对于掌握JavaScript的面向对象编程至关重要。下面将详细介绍这个"魔法三角":
1. constructor
- 定义:
constructor
是一个函数,它被用来初始化一个新创建的对象实例。当使用new
关键字创建一个新的对象时,构造函数会被调用。 - 作用:主要负责为新创建的对象设置初始属性和方法。
示例:
function Person(name, age) {
this.name = name;
this.age = age;
}
const Kobe = new Person('Kobe', 24);
2. prototype
- 定义:每个函数都有一个
prototype
属性,它是一个对象,用于存储可以被该函数的所有实例共享的方法和属性。 - 作用:通过
prototype
属性,可以实现原型链继承,允许子类继承父类的属性和方法。
示例:
Person.prototype.greet = function() {
console.log(`my name is ${this.name}.`);
};
const Kobe = new Person('Kobe', 24);
Kobe.greet(); // "my name is kobe."
3. proto
- 定义:
__proto__
是每个对象的一个内部属性(非标准属性),指向该对象的原型对象。在ES6中,推荐使用Object.getPrototypeOf()
或Object.setPrototypeOf()
来获取或设置原型。 - 作用:
__proto__
是原型链的核心,当尝试访问一个对象的属性时,如果该对象本身没有这个属性,JavaScript引擎会沿着__proto__
链向上查找,直到找到该属性或者到达原型链的末端(通常是null
)。
示例:
const Kobe = new Person('Kobe', 24);
console.log(Kobe.__proto__ === Person.prototype); // true
4. 关系
构造函数与prototype:
每个构造函数都有一个
prototype
属性,这是一个对象,包含所有实例共享的方法和属性。当使用
new
关键字创建对象时,新对象的__proto__
属性会被设置为构造函数的prototype
对象。__proto__与原型链:
__proto__
属性使得对象能够访问其构造函数prototype
上的方法和属性。通过
__proto__
,可以形成一个从子对象到父对象的链式结构,即原型链。constructor与prototype:
prototype
对象上有一个默认的constructor
属性,它指向构造函数本身。这个
constructor
属性可以帮助我们识别一个对象是由哪个构造函数创建的。
5. 图解
6. 示例代码
function Person(name, age) {
this.name = name;
this.age = age;
}
// 在构造函数的原型上添加方法
Person.prototype.greet = function() {
console.log(`my name is ${this.name}.`);
};
const Kobe = new Person('Kobe', 24);
// 查看Kobe的原型
console.log(Kobe.__proto__ === Person.prototype); // true
// 查看Person.prototype的constructor属性
console.log(Person.prototype.constructor === Person); // true
// 使用Kobe调用greet方法
Kobe.greet(); // "my name is Kobe."
// 原型链
console.log(Object.getPrototypeOf(Kobe) === Person.prototype); // true
7. 总结
- constructor:构造函数,用于初始化新创建的对象实例。
- prototype:构造函数的原型对象,用于存储可以被所有实例共享的方法和属性。
- proto:对象的内部属性,指向该对象的原型对象,用于实现原型链继承。
这就是JS的"魔法三角"吗?看起来并不难吧?
热门推荐
大明山:32奇峰13幽涧,杭州边上的“小黄山”
《喜卷常乐城》:国产情景喜剧的新尝试
从深呼吸到专业治疗:全方位应对焦虑性胸口疼痛
一顿饭五大碗老将军还能战破解3D字谜
青少年禁毒教育:远离毒品,拥抱健康
国际禁毒日:揭秘吸毒背后的公共卫生危机
吸毒毁一生,器官伤痕累累
皖浙1号路秋景打卡,美爆朋友圈!
“你个老六”“栓Q”进校园,专家警示:网络黑话阻碍青少年语言学习
双十一催生“剁手党”“尾款人”,网络用语折射消费文化变迁
乳铁蛋白:助力宝宝健康成长的免疫卫士
胰腺囊性肿瘤的早期诊断:影像学与生物标志物双管齐下
“北京到底有谁在啊?”:从网络热梗到城市金句
网络流行语:社会语言学视角下的文化镜像
海来阿木和云朵唱响《有生之恋》,情感共鸣爆棚
如何辨别2008北京奥运会纪念币真伪?
A股再现生肖股炒作:桂发祥9连板,专家提醒警惕风险
1938年后日军装备大更新:18种单兵装备全解析
牛津斯坦福双学位加持,苏纳克当选英国首位印度裔首相
深圳三山:梧桐俯市景,七娘拥海岸,梅沙观日落
深圳三大免费景点:从海岸日落到600年古城
深圳湾观鸟、大梅沙戏水、欢乐港湾摩天轮:周末游玩精选
深圳48小时:六大景点玩转都市繁华与海岸风光
牙石形成真相:下前牙最易堆积,定期洁牙很重要
洗牙是医疗行为,自行操作隐患多
网络烂梗泛滥,青少年社交受冲击?
临沧市:打造全球最大澳洲坚果种植基地的科技密码
复兴区开展敬老院慰问活动,多样化服务温暖老人心
怀集&临沧:夏威夷果致富经
夏威夷果:从天堂之国火遍全球的秘密