怎样用JavaScript实现原型模式
原型模式是指原型实例指向创建对象的种类,并通过拷贝这些原型创建新的对象,是一种用来创建对象的模式,也就是创建一个对象作为另一个对象的prototype属性;
prototype警告:学习了解原型模式前需先学习原型、原型链、prototype、__proto__、constructor等知识;
实现原型模式ES5中的API:Object.create(prototype, optionalDescriptorObjects)
Object.create()方法接收两个参数:第一个参数是__proto__对象,第二个是prototiesObject(可选,使用第二个参数可以初始化额外的其他属性,接受字面量对象形式);
var vehiclePrototype = { model:'保时捷', getModel: function () {console.log(’车辆模具是:’ + this.model); }};var vehicle = Object.create(vehiclePrototype,{ 'model':{value:'法拉利' }});vehicle.getModel(); //车辆模具是:法拉利
我们使用Object.create实际上是新建了一个对象vehiclePrototype,并且继承了vehiclePrototype的方法,所以此时vehicle.__proto__ == vehiclePrototype;
第二个参数中初始化了'model'的值,将model的值初始化为了'法拉利',所以此时新创建的对象vehiclePrototype中只有一个model,值为'法拉利';
不用Object.create()实现,用prototype:
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(’法拉利’);car.getModel(); // 车辆模具是:法拉利
上述代码中,我们可以看到核心是在vehicle中,我们先创建了一个新的构造函数,然后将该函数的原型指向vehiclePrototype,然后进行实例化该函数,最后继承之后调用prototype上的init方法,最后将执行结果进行返回也是同样可以实现的;
总结原型模式在JavaScript中无处不在,其他模式中有很多也是基于prototype来实现的,所以好好学习、复习原型和原型链的知识很重要,重点是prototype、__proto__、constructor等关键属性知识点;
以上就是怎样用JavaScript实现原型模式的详细内容,更多关于JavaScript原型模式的资料请关注好吧啦网其它相关文章!
相关文章: