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的"魔法三角"吗?看起来并不难吧?
热门推荐
魔都必打卡!宁波菜在上海的隐藏美味
武夷山秋色正浓,这份攻略请收好!
天一阁与老外滩:宁波的双子星地标
跟着“最上海”线路打卡文化之旅
迪士尼+枫泾古镇:宁波到上海二日游攻略
福建自驾游新宠:三坊七巷、鼓山和平潭象鼻湾
福建自驾游必打卡:武夷山到太姥山的诗意之旅
11月最佳自驾游:探秘屏南古村落
五一福建自驾游必看:车辆检查清单
如何正确输入和理解绝对值符号的用法与技巧
榕基软件:如何用财务指标评估投资风险?
瑞舒伐他汀与普伐他汀:降脂效果与副作用全面对比
秋冬养花神器:中药渣变废为宝
中药渣变废为宝:科技创新引领绿色发展新趋势
脉络宁药渣巧制花肥,变废为宝助植物生长
肖战版郭靖引爆春节档:徐克重塑金庸江湖
肖战谈《射雕英雄传》心得:用执着与善良诠释“侠之大者”
肖战版郭靖:争议与经典,谁主沉浮?
刹车片厚度只剩0.5cm?赶紧换!
电吹管培训:从入门到精通,开启音乐新旅程
老年大学电吹管培训火爆,你心动了吗?
云太医郑州素朴中医院孟毅教授:浅谈高血脂的中医诊疗
区块链:破解音乐版权保护难题的新利器
网店售卖侵权音乐U盘被判刑:知识产权保护再敲警钟
嗨翻天背后的快乐密码:揭秘玩乐心理
《仙王的日常生活》第五季来袭:妹妹王暖登场,经典IP再续新篇
北京交管发布开学季交通安全提示:家长学生需知这些要点
福建多地明确2024秋季开学时间!
开学季防疫攻略:如何避免生病
2025春季开学全攻略:时间安排、物质准备到心理调适