莞城做网站公司,网站建设ip,网站中文域名好吗,外外贸网站推广方案在JavaScript中#xff0c;constructor、prototype和__proto__是与对象创建和继承机制紧密相关的三个概念。理解它们之间的关系对于掌握JavaScript的面向对象编程至关重要。下面将详细介绍这个魔法三角#xff1a;
1. constructor 定义#xff1a;constructor是一个函数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); // true4. 关系 构造函数与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); // true7. 总结
constructor构造函数用于初始化新创建的对象实例。prototype构造函数的原型对象用于存储可以被所有实例共享的方法和属性。__proto__ 对象的内部属性指向该对象的原型对象用于实现原型链继承。
这就是JS的魔法三角吗看起来并不难吧