面向对象的JavaScript
多态
多态背后的思想是将“做什么”和“谁去做,怎样去做”分离开来,也就是将“不变的事物”与“可变的事物”分离开来。
其最根本的作用就是通过把过程化的条件分支语句转化为对象的多态性,从而消除这些条件分支语句。
封装
目的是将信息隐藏。
封装数据:
js依赖变量的作用域来实现封装特性,而且只能模拟出public和private这两种特性
var myObject = ( function () { var _name = "salody"; //私有(private)变量 return { getName: function(){ //公开(public)方法 return _name; } } })(); console.log(myObject.getName()); //输出:salody console.log(myObject._name); //输出:undefined
原型模式
从设计模式的角度讲,原型模式是用于创建对象的一种模式,如果我们想要创建一个对象,一种方法是先指定它的类型,然后通过类来创建这个对象。原型模式选择了另外一种方式,我们不在关心对象的具体类型,而是找到一个对象,然后通过克隆来创建一个一模一样的对象。
在ECMAScript5中提供了Object.create方法,可以用来克隆对象
原型模式的真在目的在于提供了一种便捷的方式去创建某个类型的对象,克隆只是创建这个对象的过程和手段。
1 var Plane = function () { 2 this.blood = 100; 3 this.attackLevel = 1; 4 this.defenceLevel = 1; 5 } 6 7 var plane = new Plane(); 8 plane.blood = 500; 9 plane.attackLevel = 10; 10 plane.defenceLevel = 3; 11 12 var clonePlane = Object.create(plane); 13 console.log(clonePlane); 14 15 //对于不支持Object.create方法的浏览器,用下面的代码 16 Object.create = Object.create || function (obj){ 17 var F = function () {}; 18 F.prototype = obj; 19 20 return new F(); 21 }