免费申请网站官网,深圳做网上商城网站,南通网站推广怎么收费,wordpress框架解密概念
原型#xff1a;函数都具有 prototype 属性#xff0c;称之为原型#xff0c;也称之为原型对象 1.1 原型可以放一些属性和方法#xff0c;共享给实例对象使用#xff08;也就是原生方法#xff09;。 1.2 原型可以做继承原型链#xff1a;对象都有 __proto__ 属性…概念
原型函数都具有 prototype 属性称之为原型也称之为原型对象 1.1 原型可以放一些属性和方法共享给实例对象使用也就是原生方法。 1.2 原型可以做继承原型链对象都有 __proto__ 属性这个属性指向它的原型对象原型对象也是对象也有 __proto__ 属性指向原型对象的原型对象这样的链式结构称为原型链最顶层找不到则返回 null.
显式原型prototype是每个函数都有的一个属性它指向一个对象该对象包含可以由该函数的实例共享的属性和方法。当我们创建一个函数时JavaScript 会自动为该函数创建一个 prototype 对象并将其赋值给函数的 prototype 属性。隐式原型__proto__是每个对象都有的一个属性它指向该对象的构造函数的原型对象。当我们创建一个对象时JavaScript 会自动为该对象创建一个 __proto__ 属性并将其指向创建该对象的构造函数的 prototype 属性。
区别
prototype 是函数对象特有的属性而 __proto__ 是对象特有的属性prototype 用于实现继承它包含了可以由该函数的实例共享的属性和方法。而 __proto__ 用于查找原型链它指向该对象的构造函数的原型对象prototype 可以通过函数名访问到它显式原型而 __proto__ 是隐式原型可以通过对象的实例来访问它。
// 1. 声明一个构造函数 Person
function Person(name) {this.name name;
}// 2. 为构造函数的原型增加 sayHello 方法
Person.prototype.sayHello function() {console.log(Hello, this.name);
};// 3. person1 为构造函数 Person 的实例对象
const person1 new Person(Alice);// 4. 实例对象的隐式原型指向构造函数的原型
console.log(person1.__proto__ Person.prototype); // true// 5. 构造函数的原型上的构造函数指向构造函数本身
console.log(Person.prototype.constructor Person); // trueperson1.sayHello(); // 输出Hello, Alice由 5 可得 原型链
第一个是 fun 是实例对象 proto 等价于 [[prototype]] 第二个是 [[prototype]] 的 proto 是 Person 这个对象注意不是函数/类他的另一个身份是函数 第三个是 Person 的 proto 是 Object是由 Object.create 或 {} 或 new Object() 产生的