详解 JavaScript 中 “__proto__“ 和 “prototype“ 的区别和联系

在 JavaScript 中,每个对象都有一个内置的属性,称为 "proto",这个属性可以用来引用该对象的原型对象。原型对象是一个普通的 JavaScript 对象,它可以包含属性和方法。这些属性和方法可以被该对象继承。
"prototype" 是一个构造函数的属性,它指向一个原型对象。当我们使用构造函数来创建一个新对象时,新对象的 "proto" 属性会被设置为构造函数的 "prototype" 属性的值。
举个例子:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log("Hello, I'm " + this.name);
}
var person1 = new Person("Alice");
person1.sayHello(); // "Hello, I'm Alice"
console.log(person1.__proto__ === Person.prototype); // true
在这个例子中,我们定义了一个 Person 的构造函数,并为它的 "prototype" 属性赋值了一个包含 sayHello 方法的对象。我们使用这个构造函数创建了一个新的 person1 对象,并调用了 sayHello 方法。这个方法是通过 person1 对象继承自 Person.prototype 得到的。我们还可以看到,person1 的 "proto" 属性指向了 Person.prototype。
"proto" 属性是用来访问对象的原型对象的,而 "prototype" 属性是用来设置构造函数的原型对象的。
首先,"proto" 是 JavaScript 内置的一个属性,用来访问一个对象的原型对象。它可以在所有现代浏览器中使用,但是并不是所有浏览器都支持。在早期的浏览器中,可能需要使用 Object.getPrototypeOf() 方法来访问原型对象。
"prototype" 是 JavaScript 中所有函数都有的一个属性,它指向一个原型对象。当我们使用构造函数来创建一个新对象时,新对象的 "proto" 属性会被设置为构造函数的 "prototype" 属性的值。
关于 "proto" 和 "prototype" 的关系,我们可以这样理解:
"proto" 属性是对象的内部属性,用来访问该对象的原型对象。
"prototype" 属性是函数的外部属性,用来设置构造函数的原型对象。
当我们使用构造函数来创建一个新对象时,新对象的 "proto" 属性会被设置为构造函数的 "prototype" 属性的值。
总结来说,"proto" 是 JavaScript 内置的一个属性,用来访问一个对象的原型对象。
而"prototype" 是所有函数都有的一个属性,指向一个原型对象。当我们使用构造函数来创建一个新对象时,新对象的 "proto" 属性会被设置为构造函数的 "prototype" 属性的值。
"proto" 属性是对象的内部属性,"prototype" 属性是函数的外部属性。
 

猜你喜欢

转载自blog.csdn.net/zcr_59186/article/details/128553903