js中prototype 和 「proto」 区别
文章类型:Javascript
发布者:hp
发布时间:2023-05-22
prototype和__proto__(也可以称为"[[Prototype]]")是两个相关的概念,用于实现原型继承
1:prototype:是函数对象(构造函数)独有的属性,它指向一个对象,这个对象是通过该构造函数创建的实例的原型。可以通过xxx.prototype访问到构造函数的原型对象。指向实例化出来对象的原型对象
// 构造函数
function Person(name) {
this.name = name;
}
// 在构造函数的原型上定义方法
Person.prototype.sayHello = function() {
console.log(`Hello, my name is ${this.name}.`);
};
2:__proto__:是每个js对象(包括函数对象)都有的属性,隐式属性,它指向对象的原型。通过obj.__proto__或Object.getPrototypeOf(obj)可以访问到对象的原型。
创建对象实例
const person1 = new Person('Alice');
// 访问对象的原型
console.log(person1.__proto__ === Person.prototype); // 输出:true
console.log(Person.prototype.isPrototypeOf(person2)); // 输出:true
console.log(Object.getPrototypeOf(person1) === Person.prototype); // 输出:true
1:prototype是函数对象独有的属性,用于定义构造函数的原型,__proto__是每个js对象都有的属性,用于指向对象的原型
2:prototype用于实现构造函数和实例之间的原型继承关系,__proto__用于在实例与其原型之间建立连接
3:__proto__属性为内部属性,隐式,不推荐直接使用
4:使用Object.getPrototypeOf(obj)或Object.setPrototypeOf(obj, prototype)来访问或设置对象的原型
5:Object.create(proto)方法可以创建一个新对象,以指定的对象作为原型