js设计模式之路--对象的创建方式
创建对象的方式有很多种,但是我们常用的也就那么几种。
1、构造函数式:
这种方式就是通过new关键字进行对象创建,同时在new的时候也可以传参数。
1 function Person(name, sex, age) { 2 this.name = name; 3 this.sex = sex; 4 this.age = age; 5 } 6 7 var p = new Person('z3', '男', '20');
2、作为普通函数去调用:
1 function Person(name, sex, age) { 2 this.name = name; 3 this.sex = sex; 4 this.age = age; 5 } 6 7 Person('z3', '男', '20');
在js中类也是有函数构造的,所以类也就是一个函数。既然是函数那么我们就可以直接以普通函数的方式来调用。
注意:
直接调用会有一个问题,因为在Person类中,我们同this给对象的对象昂绑定了属性。其中这个this就是谁调用就指向谁。这个前面构造函数式的调用进行区别对比。在普通函数式调用中,是在全局作用域中调用,那么这个全局作用域就是在window下,那个这个函数就是被window调用的。因此这个的this就指向window。
我们可以测试下:
1 console.log(name);
结果: z3
这样做的结果,就是将函数内部的属性执行绑定到window上。
3、普通方法当做另一个对象的作用域 call方法
在另一个对象的作用域中去调用。
1 function Person(name, sex, age) { 2 this.name = name; 3 this.sex = sex; 4 this.age = age; 5 } 6 7 var o = new Object(); 8 9 Person.call(o, 'l4', '女', 25);
使用:
alert(o.name);
结果: l4
说明:
1、我们还是将Person当做了一个普通的函数,然后通过call将其绑定到我们新创建的对象o上。这个相当于给o对象赋值Person中的属性。因此o可以直接访问。
2、call方法中第一个是绑定的对象,后面是被绑定函数接手的参数。
浙公网安备 33010602011771号