JavaScript中的对象原型
在JavaScript中,对象的原型是用作对象的父对象或基对象的对象。原型对象包含对象继承的属性和方法。
JavaScript中的每个对象都有一个称为prototype 原型的特殊属性,它引用了对象的原型。prototype原型属性是在创建对象时自动创建和分配的,可以使用__proto__属性或Object.getPrototypeOf()方法访问。
例如,考虑以下代码:
let person = { name: "John"};
console.log(Object.getPrototypeOf(person) === person.__proto__); // Output: true
prototype原型属性可用于创建对象链,其中对象从其原型继承属性和方法,原型又从其自己的原型继承属性和方法,依此类推。
JavaScript还提供了一个内置的Object.create()方法,允许您创建具有指定原型的对象。例如:
let person = { name: "John", age: 30};
let employee = Object.create(person);
console.log(employee.name); // Output: "John" (inherited from person)
创建具有指定原型的对象的另一种方法是使用new 具有构造函数的运算符
function Person(name, age) {
this.name = name;
this.age = age;
}
let employee = new Person("John", 30);
console.log(employee.name); // Output: "John"
在此示例中,员工employee对象是使用Person构造函数创建的,并继承在Person.prototype对象上定义的属性和方法。
值得注意的是,JavaScript还有一个名为Object.prototype的内置对象,它是所有对象的原型,提供了toString()、valueOf()和hasOwnProperty()等方法。
总之,JavaScript中的原型用于创建对象链,其中对象从其原型继承属性和方法,从而为面向对象编程创建可重用机制。
对象继承
在JavaScript中,对象可以从其他对象继承属性和方法,这是一种原型继承机制。
JavaScript中的每个对象都有一个称为prototype原型的特殊属性,它是一个用作对象的父对象或基对象的对象。prototype原型对象包含对象继承的属性和方法。
例如,如果您有一个具有属性name和age的对象person,并且您想创建另一个继承person属性的对象employee,您可以将employee对象的prototype原型设置为person。
let person = {
name: "John",
age: 30
};
let employee = Object.create(person);
employee.jobTitle = "Developer";
console.log(employee.name); // Output: "John" (inherited from person)
console.log(employee.jobTitle); // Output: "Developer" (own property)
在此示例中,employee对象从person对象继承name属性,但具有其jobTitle属性。
JavaScript还提供了一个内置的Object.create()方法,允许您创建具有指定原型的对象。
let person = {
name: "John",
age: 30
};
let employee = Object.create(person);
创建具有指定原型的对象的另一种方法是将new运算符与构造函数一起使用。
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function(){console.log(`Hi, My name is ${this.name}`)}
let employee = new Person("John", 30);
console.log(employee.name); // Output: "John"
console.log(employee.greet()); // Output: Hi, My name is John
在此示例中,employee对象是使用Person构造函数创建的,并继承在Person.prototype原型对象上定义的属性和方法。
值得注意的是,在搜索属性时,JavaScript会首先在对象本身寻找属性,然后在它的原型上,依此类推,在原型链上,一个叫做“原型链解析”的过程。如果在对象本身没有找到属性,JavaScript会在对象的原型上寻找它,如果在那里没有找到,它会在原型的原型上寻找它,依此类推,直到它到达原型链的末端。