工厂模式创建对象

工厂模式创建对象不会使用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;
}

先保存要返回的对象在一个私有变量中,这样就能拿到对象公有的方法了。

同样这种创建对象的方法同属性和方法都在构造函数中的做法是一样的,所有的方法和属性都和父类的是独立的,也就是方法还是没有复用。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值