AngularJS学习笔记–使用angular.extend()实现工厂模式
angular提供了extend()这个非常实用的方法,它的作用是将第一个参数以后的参数(可以传入多个参数)合并到第一个参数,即将其属性复制给第一个参数,如果有同名属性,则覆盖第一个参数的同名属性。
简单实例:
var obj = angular.extend(
{//参数1
a: 100,
b: 200
},
{//参数2
b: 'test',
c: {
d:300,
e: function(){
console.log('function e')
}
}
}
);
console.log(obj);
obj.c.e();
运行以上代码输出结果:
可见两个参数被合并成一个对象,参数1中的属性 b: 200
被覆盖为b:'test'
,参数2中的属性c的引用也被并入参数1中。
利用这个方法,能让我们在构建JS工厂函数时,更好的分离生产对象的共有和独有属性,或定制个别对象的共有属性。
//创建工厂
var robotFactory = function(type){
return angular.extend(
{ //参数1里存放共有属性
move: function(){
console.log('moving on the ground');
}
},
{
BattleRobot:{
weight: 100,
attack: function(){
console.log('fire boom boom boom');
}
},
ScoutRobot: {
weight: 20,
move: function(){ //定制ScoutRobot的move函数
console.log('flying wiii...');
},
scout: function(){
console.log('watching battle field');
}
}
}[type] || { describe:function(){console.log('this is an unknow robot')}}
//根据输入的type字符串从对象中取出一个子属性作为参数2
);
};
//使用factory函数获取对象,并测试
var robotA = robotFactory('BattleRobot');
var robotB = robotFactory('ScoutRobot');
robotA.attack();
robotB.move();
robotB.scout();
输出结果:
fire boom boom boom
flying wiii...
watching battle field