目录
(有明确目的可以直接跳转浏览对应内容)
1.工厂创建方法对象
(1)对象传统创建方式的弊端
我们都知道,使用var 对象名 new Objectd的方法和直接var 对象名 大括号的方法都可以创建新的对象,不过一两个尚且轻松,倘若是需要极多的对象,一个一个的创建,就不知要用到多少篇幅了。
var obj = new Object();
obj.name = "豹子头零充";
obj.age = "18";
(2)何谓工厂方法?
工厂方法创建对象,即批量(自动化的)生产对象,这是一种大批量创建对象的方法,我们将在函数内创建对象。
(3)工厂方法的使用
我们需要写出如下代码(解析都在注释中):
function zR(){
//创建新对象
var obj = new Object();
//在对象内添加属性
obj.name = "豹子头零充";
obj.age = "18";
obj.gender = "男";
obj.sayName = function(){//在对象内设函数,因为this是函数的隐含参数。
console.log(this);//this指向函数zR内的name
}
//而后需要返回对象
return obj;
}
//先新建一个函数,在函数内设置对象,对象内添加属性,ruturn返回对象名并终止函数。
var obj1 = zR();
obj1.sayName();
//创建变量,变量内是函数。
//而后调用this来显示对象内容
结果为:
那么,就会有很多人预见了,这个方法无法改变内部的对象属性,无论创建多少个变量来包含函数,都是毫无意义的,不如直接调用对象。
注:如不了解this,请点击:参数this的简单抽象化理解
那么,我们就需要用到函数名右边括号里的东西——形参。
function zR(name,age,gender){//设置三个形参
//创建新对象
var obj = new Object();
//在对象内添加属性
obj.name = name;
obj.age = age;
obj.gender = gender;//三个形参分别对应三个对象属性值
obj.sayName = function(){//在对象内设函数,因为this是函数的隐含参数。
console.log(this);//this指向函数zR内的name
}
//而后需要返回对象
return obj;
}
//先新建一个函数,在函数内设置对象,对象内添加属性,ruturn返回对象名并终止函数。
var obj1 = zR("豹子头零充",18,"男");
obj1.sayName();
//注意:实参中引号不要忘记,引号和数据类型有关
var obj2 = zR("黑旋风理亏",28,"男");
obj2.sayName();
//创建变量,变量内是函数。
//而后调用this来显示对象内容
结果为:
很明显,我们可以来设置无限多包含函数的变量,只需要更改实参,就可以起到我们需要的快捷效果,而不是一个对象一个对象的创建。但如要进行大批量创建,可以搭配循环语句,如while、for等,在此不多赘述。
2.类数组arguments的使用
(1)arguments的作用
首先,因为有这个对象,我们在函数内的形参可以不用写直接写实参了。
函数内的内置类数组(array-like)名为arguments,它用于应对形参过多等等情况。
(2)arguments的使用
我们来看看,依旧是用工厂的代码举例:
function zR(){//没有形参
var obj = new Object();
obj.name = arguments[0];//arguments[]代替了形参的位置
obj.age = arguments[1];
obj.gender = arguments[2];
obj.sayName = function(){
console.log(this);
}
return obj;
}
var obj1 = zR("豹子头零充",18,"男");//实参输入仍然有效
obj1.sayName();
结果为:
没错,有了arguments,我们就可以用于形参过多的情况,或者依照个人心情去写形参活arguments,毕竟货比三家,不能在形参一棵树上吊死。
3.总结
- 工厂方法创建对象,即批量(自动化的)生产对象
- 用工厂方法,我们可以来设置无限多包含函数的变量,只需要更改实参,就可以起到我们需要的快捷效果,而不是一个对象一个对象的创建。
- 函数内的内置类数组(array-like)名为arguments,可以替代形参使用。
- 使用arguments可以有效发挥在形参过多的函数中,将过多的冗余形参代替掉,成为一股清流。