工厂模式创建对象不会使用new操作符,而是返回一个对象字面量。
例子:
function Animal(name) {
return {
run: function() {
alert(name + " is running!");
};
}
}
var animal = Animal("fox");
animal.run();
继承:
继承也很简单,在获取到animal对象后,直接在animal对象上进行想要的修饰即可。
function Rabbit(name) {
var rabbit = Animal(name); // make animal
rabbit.bounce = function() { // mutate
this.run()
alert(name + " bounces to the skies! :)")
};
return rabbit; // return the result
}
var rabbit = Rabbit("rab");
rabbit.bounce();
此时使用var rabbit = Rabbit("ss");获得的对象就已经继承了Animal。
private类型变量:
function Bird(name) {
var speed = 100; // private prop
function openWings() { /* ... */ } // private method
return {
fly: function() {
openWings()
this.move()
},
move: function() { /*...*/ }
}
}
上边的代码运行没有什么问题,speed很openWings也是私有变量,但是细看还是有缺陷的。如何在openWings中调用Bird的public方法呢?
再来看下边的例子:
function Bird(name) {
function doFly() {
openWings();
self.move();
} // private method
var self ={
fly: function() { doFly() },
move: function() { /*...*/ }
};
return self;
}
先保存要返回的对象在一个私有变量中,这样就能拿到对象公有的方法了。
同样这种创建对象的方法同属性和方法都在构造函数中的做法是一样的,所有的方法和属性都和父类的是独立的,也就是方法还是没有复用。