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方法中第一个是绑定的对象,后面是被绑定函数接手的参数。

 

posted on 2017-07-24 20:13  jayafs  阅读(69)  评论(0)    收藏  举报

导航