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)方法可以创建一个新对象,以指定的对象作为原型