
原型模式原型模式,使用原型实例指向创建对象的类,以及用于创建新对象类的共享原型的属性和方法.
对于原型模式,我们可以使用JavaScript独特的原型继承功能来创建一个对象,即,将一个对象创建为另一个对象的原型属性值. 原型对象本身是对每个构造函数创建的对象的有效使用. 例如,如果构造函数的原型包含name属性(请参见下面的示例),则此构造函数创建的对象将具有此属性.
检查现有文献中原型模式的定义. 没有JavaScript. 您可能会发现许多解释都是关于类的,但实际上,基于原型继承的JavaScript完全避免了类的概念. . 我们只需从现有对象复制即可创建对象.

真正的原型继承被提议为ECMAScript5标准的最新版本. Object.create方法用于创建此类对象. 此方法创建指定的对象,并且该对象的原型具有指定的对象(即,该方法传递到第一个参数对象中)也可以包含其他可选的指定属性. 例如,Object.create(原型,optionalDescriptorObjects),在下面的示例中也可以看到这种用法:
// 因为不是构造函数,所以不用大写
var someCar = {
drive: function () { },
name: '马自达 3'
};
// 使用Object.create创建一个新车x
var anotherCar = Object.create(someCar);
anotherCar.name = '丰田佳美';
Object.create允许您直接从其他对象继承. 使用此方法的第二个参数,您可以初始化其他附加属性. 例如:

var vehicle = {
getModel: function () {
console.log('车辆的模具是:' + this.model);
}
};
var car = Object.create(vehicle, {
'id': {
value: MY_GLOBAL.nextId(),
enumerable: true // 默认writable:false, configurable:false
},
'model': {
value: '福特',
enumerable: true
}
});
在这里,您可以在Object.create的第二个参数中使用对象文字,以传递要初始化的其他属性. 语法类似于Object.defineProperties或Object.defineProperty方法. 它允许您设置属性的属性,例如可枚举,可写或可配置.
如果您想自己实现原型模式,而不是直接使用Object.create. 对于上面的示例,可以使用以下代码:

var vehiclePrototype = {
init: function (carModel) {
this.model = carModel;
},
getModel: function () {
console.log('车辆模具是:' + this.model);
}
};
function vehicle(model) {
function F() { };
F.prototype = vehiclePrototype;
var f = new F();
f.init(model);
return f;
}
var car = vehicle('福特Escort');
car.getModel();
几乎在JavaScript中都使用原型模式. 其他许多模式也基于原型. 在这里原型模式,每个人都应注意浅拷贝和深拷贝问题,以免出现参考问题.
原型模式适用于在创建复杂对象时以及那些要求不断变化且对象结构不断变化的情况下通过共享相对稳定的属性和方法提取的继承的实现.

本文是一系列文章,您可以互相参考进行确认并共同努力〜
JS抽象工厂模式JS工厂模式JS构建器模式JS原型模式JS单例模式JS回调模式JS外观模式JS适配器模式JS功能缓存(备注模式)JS状态模式JS桥接模式JS观察者模式
Internet上大多数帖子的色调各不相同,甚至有些不一致之处. 以下文章是学习过程的总结. 如果发现错误,请留言指出〜
参考:
设计模式的原型模式
“ JavaScript设计模式”-张荣明
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-177220-1.html
你的未来你决定
9