在 JavaScript 中,每個對象都有一個 prototype
屬性,可以通過 Object.prototype
來訪問。prototype
屬性是一個指向原型對象的指針,它包含了共享給所有實例對象的屬性和方法。通過原型對象,可以實現對象之間的繼承和共享。
可以通過以下幾種方式來使用 prototype
:
prototype
屬性:通過給構造函數的 prototype
屬性添加屬性和方法,可以使得通過該構造函數創建的所有實例對象都共享這些屬性和方法。function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.sayHello = function() {
console.log("Hello, my name is " + this.name);
};
var person1 = new Person("John", 25);
person1.sayHello(); // 輸出 "Hello, my name is John"
__proto__
屬性:每個實例對象都有一個 __proto__
屬性,它指向構造函數的 prototype
屬性。通過實例對象的 __proto__
屬性,可以訪問到原型對象的屬性和方法。console.log(person1.__proto__ === Person.prototype); // 輸出 true
person1.__proto__.sayHello(); // 輸出 "Hello, my name is John"
Object.create()
方法創建一個新對象,新對象的原型對象就是作為參數傳入的對象。var personProto = {
sayHello: function() {
console.log("Hello, my name is " + this.name);
}
};
var person1 = Object.create(personProto);
person1.name = "John";
person1.age = 25;
person1.sayHello(); // 輸出 "Hello, my name is John"
需要注意的是,prototype
屬性只在構造函數中存在,而 __proto__
屬性和 Object.create()
方法在所有對象中都存在。此外,通過 prototype
添加的屬性和方法是在實例對象的原型鏈上,而不是直接在實例對象上,因此可以被所有實例對象共享。