JavaScript 中的每个对象都具有关联的 prototype 对象,它是一个指向另一个对象的指针,其中包含一组有用的属性和方法,可以让我们轻松地将这些方法引用到任何对象上。通过使用原型扩展,我们能够将方法和属性添加到原型对象上,以便所有的对象(实例)都可以访问和使用它们。
一、原型继承
原型继承是一种可以使用 JavaScript 的原型链接来实现的非常基本且有力的继承方式。通过扩展一个对象的原型,我们可以使其获得从其原型继承而来的属性和方法的访问权限。
下面是一个示例,说明 JavaScript 原型继承的工作原理:
//定义Animal构造函数
function Animal(name) {
this.name = name;
}
//为Animal的原型对象添加方法
Animal.prototype.getName = function() {
console.log('Animal name is '+this.name);
};
//定义Cat构造函数
function Cat(name) {
this.name = name;
}
//设置Cat的原型对象为Animal
Cat.prototype = new Animal();
//实例化Cat对象
var snowball = new Cat('Snowball');
snowball.getName(); //Animal name is Snowball
在上面的示例中,我们首先定义了Animal函数,并将其原型扩展了一个getName方法。接下来,我们定义了一个Cat 构造函数,然后将其原型设置为Animal 的一个实例。这两个对象之间的原型链会使Cat 实例从Animal 原型对象继承getName 方法。最后,我们实例化了一个名为snowball的Cat 对象,并调用了它从Animal 继承的getName 方法从而输出该对象的名字。
二、对象扩展
使用JavaScript原型对象还可以通过以下方式向已有对象添加新的方法或属性:
//定义Animal构造函数
function Animal() { }
Animal.prototype.speak = function() {
return this;
};
//定义Dog构造函数
function Dog() { }
//将狗的原型对象设置为Animal的一个实例
Dog.prototype = new Animal();
//给狗定义一个新的bark属性
Dog.prototype.bark = function(){
return 'The dog barks';
}
//创建一个dog对象并调用speak()方法和bark()方法
var dog = new Dog();
console.log(dog.speak().bark()); // 'The dog barks'
在上面的例子中,我们首先定义了Animal构造函数并给其原型对象添加了一个speak方法。接下来,我们定义了一个Dog 构造函数,并通过把Dog 原型对象设置为Animal 的一个实例来指定它从Animal 原型继承。最后,我们在Dog的原型对象上添加了一个新的方法bark,这个方法返回字符串"The dog barks"。
总结
使用 JavaScript 原型继承和原型扩展,我们可以轻松地创建复杂、灵活的对象,并增强已有的对象。在实际应用中,我们可以使用组合等方式进行更加丰富的开发和使用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:javascript Prototype 对象扩展 - Python技术站