属性(方法)在Person对象中应用到了tilo对象的原型,我们可以重新定义在tilo对象中的属性,如果我们想要它不一样的话。上面例子中,我们使用Object.create(),然而,IE8中不支持这个比较新的方法,在这种情况下,我们可以模拟他的行为:
var vehiclePrototype = {
init: function (carModel) {
this.model = carModel;
},
getModel: function () {
console.log( “The model of this vehicle is ” + this.model);
}
};
function vehicle (model) {
function F() {};
F.prototype = vehiclePrototype;
var f = new F();
f.init(model);
return f;
}
var car = vehicle(“Ford Escort”);
car.getModel();
唯一不好的地方就是这个方法你没法指定为可读的属性,而使用Object.create()时可以指定。不管怎样,原型模式展示了对象如何继承自其它对象。
结构化模式:
结构化设计模式在当你想理解一个系统如果工作的时候显得非常有帮助。它能使应用扩展方便,维护方便。我们将讨论以下两种模式:组合模式和门面模式
组合模式:
组合模式可以理解为一个对象的组合可以像单个对象一样以一致的方式处理。这是什么意思呢?好吧,考虑下面这个例子:
$(‘.myList’).addClass(‘selected’);
$(‘#myItem’).addClass(‘selected’);
//dont do this on large tables, it‘s just an example.
$(“#dataTable tbody tr”).on(“click”, function(event){
alert($(this).text());
});
$(’#myButton‘).on(“click”, function(event) {
alert(“Clicked.”);
});
很多JavaScript库提供了一致的API,不论是处理单个DOM元素还是一个DOM元素的数组。我们可以添加selected 类给所有含.myList的选择器的元素。同样我们可以使用相同的方法处理相似的DOM元素#myItem,类似的,我们可以使用on()方法附上事件处理器在多个节点或单个节点上。
门面模式:
隐藏内部复杂结构,提供给用户简单接口使用。
门面模式几乎总是可以改善大部分软件的可用性。使用jQuery作为例子,一个最受欢迎的方法ready():
$(document).ready(function() {
//all your code goes here...
});
ready()方法就实现的门面模式,如果你去查看源代码,你将发现:
ready: (function() {
......
//Mozilla, Opera, and Webkit
if (document.addEventListener) {
document.addEventListener(“DOMContentLoaded”, idempotent_fn, false);
....
}
//IE event model
else if (document.attachEvent) {
// ensure firing before onload; maybe late but safe also for iframes
document.attachEvent(“onreadystatechange”, idempotent_fn);
// A fallback to window.onload, that will always work
window.attachEvent(“onload”, idempotent_fn);
...
}
})
ready()方法并不简单,jQuery规范游览器的一致性确保ready()在合适的时间被触发。然而,作为一名开发者,你应该用简单的接口展示出来。
总结:设计模式最让人鼓舞的是有人在过去已经成功实践了。很多开源代码实现了各种JavaScript中的是设计模式。作为程序员,我们需要意识到每种设计模式的应用场景。我希望这篇教程能帮助一步步回答这些问题。
英文原文:Tilo Mitra
文:伯乐在线 (编辑:西安站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|