javascript 高级编程系列 - 创建对象

1. 工厂模式 ( 通过工厂函数封装构造对象的细节)

复制代码
 1 function createPerson(name, age)
 2  {
 3      var obj = {};
 4      obj.name = name;
 5      obj.age = age;
 6      obj.getName = function(){
 7          return this.name;
 8      };
 9      return obj;
10 }
11 
12 var person = createPerson('leon', 30);
复制代码

2. 构造函数模式 (生成的实例对象和构造函数建立了类型关系)

复制代码
 1 function Person(name, age)
 2 {
 3     this.name = name;
 4     this.age = age;
 5     this.getName = function(){
 6         return this.name;
 7     };
 8 }
 9 
10 var person = new Person('leon', 30 );
复制代码

3. 原型模式 (多个对象实例之间共享属性值和方法)

复制代码
 1 function Person(){
 2 
 3 }
 4  
 5 Person.prototype = {
 6      constructor: Person,
 7      name: 'leon',
 8      age: 30,
 9      getName: function(){
10          return this.name;
11      }
12 };
13 
14 var person = new Person();
复制代码

4. 组合构造函数和原型模式 (构造函数模式与原型模式的结合,属性在构造函数中进行定义,方法在原型中定义)

复制代码
 1 function Person(name, age)
 2 {
 3      this.name = name;
 4      this.age = age;
 5 }
 6 
 7 Person.prototype = {
 8     constructor: Person,
 9     getName :  function(){
10           return this.name;
11     }
12 };
13 
14 var person = new Person('leon', 30 );
复制代码

5.动态原型模式 (原型模式的改进为了更好的体现封装)

复制代码
 1 function Person(name, age)
 2 {
 3       this.name = name;
 4       this.age = age;
 5       if( typeof this.getName != 'function'){
 6           Person.prototype.getName = function(){
 7               return this.name;
 8           }
 9       }
10 }
复制代码

6. 寄生构造函数模式 (工厂模式与构造函数的结合)

复制代码
 1 function Person(name, age)
 2  {
 3      var obj = {};
 4      obj.name = name;
 5      obj.age = age;
 6      obj.getName = function(){
 7          return this.name;
 8      };
 9      return obj;
10 }
11 
12 var person = new Person('leon', 30);
复制代码

 

7. 稳妥构造函数模式 (工厂模式的安全版,无公共属性,方法中无this引用)

复制代码
 1 function Person(name, age)
 2  {
 3      var obj = {};
 4      var name =  name;
 5      var age  = age;
6      obj.getName = function(){
 7          return name;
 8      };
 9      return obj;
10 }
11 
12 var person = Person('leon', 30);
复制代码

 8. 克隆模式 (基于已有对象创建新对象)

复制代码
const person = {
  name: 'leon',
  age: '38',
};

// 以现有对象作为原型创建新对象 const obj
= Object.create(person);
// 将指定对象的原型设置为另一个对象
const obj = Object.setPrototypeOf({}, person);
// 将现有对象自有可枚举属性复制到新对象中
const obj = Object.assign({}, person);

复制代码

 

posted @   箫笛  阅读(143)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示