Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

创建对象的方法 #49

Open
Jouryjc opened this issue Dec 30, 2019 · 0 comments
Open

创建对象的方法 #49

Jouryjc opened this issue Dec 30, 2019 · 0 comments

Comments

@Jouryjc
Copy link
Owner

Jouryjc commented Dec 30, 2019

工厂模式

工厂模式
优点:抽象了创建具体对象的过程;能够很好地解决多个相似对象的问题。
缺点:没有解决对象识别的问题。

构造函数模式

构造函数模式
不同之处:

  1. 没有显示地创建对象;
  2. 直接将属性和方法赋给了 this 对象;
  3. 没有 return 语句。

特点:

  1. 可以看到,构造函数的函数名是用大写字母 P 开头的。用于区别其他函数。
  2. 调用函数使用了 new 关键字。

接下来就看看以 new 的方式调用函数的步骤,并自己实现一个 new 方法:

  1. 创建一个新对象;
  2. 将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象);
  3. 执行构造函数中的代码(为这个新对象添加属性);
  4. 返回新对象。

new方法的实现

优点:可以将实例标识为一种特定的类型;上述例子中:

person1 instanceof Person;  // true
person2 instanceof Person; // true

缺点:主要问题是每个实例方法都要创建多遍。

person1.sayName === person2.sayName;  // false

原型模式

优点:所有实例共享包含的属性和方法。
缺点:也是由于其共享的特性导致的,对于包含引用类型值的属性来说,问题比较突出。
原型模式

组合使用构造函数模式和原型模式

构造函数模式用于定义实例属性,原型模式用于定义方法和共享的属性。
组合使用构造函数模式和原型模式

优点:最大限度的节省内存,支持向构造函数传递参数。
缺点:构造函数和原型模式分开,写法不好看。

动态原型模式

修改组合构造函数模式和原型模式的写法。
动态原型模式

寄生构造函数模式

基本思想是创建一个函数——封装创建对象的代码,然后再返回新创建的对象。(其实跟工厂模式是一样的,唯一的不同是使用 new 调用方法)。
寄生构造函数模式

稳妥构造函数模式

稳妥对象:指的是没有公共属性,而且其方法也不引用 this 的对象。

不同于寄生构造函数模式:

  1. 新创建对象的实例方法不引用 this;
  2. 不使用 new 操作符调用构造函数。

稳妥构造函数模式

@Jouryjc Jouryjc changed the title 面向对象编程 创建对象的方法 Dec 30, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant