创建对象的多种方式
2017-12-05 16:32
183 查看
// 1. 工厂模式 //缺点:对象无法识别,因为原型都指向Object function pe() { var o = new Object(); o.name = name; o.getname = function() { console.log(this.name) } return o } // 2. 构造函数模式 // 优点:实例可以识别为一个特定的类型 // 缺点:每次创建实例每个方法都要被创建一次 function Person(name) { this.name = name; this.getName = function() { console.log(this.name); }; } var person = new Person('zhansan'); // 2.1 构造函数模式优化 // 优点:解决了每个方法都要被重新创建的问题 // 缺点:这叫啥封装…… function Person(name) { this.name = name; this.getName = getName; } function getName() { console.log(this.name); } var person = new Person('zhansan'); // 3. 原型模式 // 优点:方法不会重新创建 // 缺点:1. 所有的属性和方法都共享 2. 不能初始化参数 function Person(name) { }; Person.prototype.name = 'keivn'; Person.prototype.getName = function() { console.log(this.name); }; var person1 = new Person(); // 3.1 原型模式优化 // 优点:封装性好了一点 // 缺点:重写了原型,丢失了constructor属性 function Person(name) { }; Person.prototype = { name: 'kevin', getName: function() { console.log(this.name); } }; var person1 = new Person(); // 3.2 原型模式优化 // 优点:实例可以通过constructor属性找到所属构造函数 // 缺点:原型模式该有的缺点还是有 function Person(name) { } Person.prototype = { constructor: Person, name: 'kevin', getName: function() { console.log(this.name); } }; var person1 = new Person(); // 4. 组合模式 // 优点:该共享的共享,该私有的私有,使用最广泛的方式 // 缺点:有的人就是希望全部写在一起,即更好的封装性 function Person(name) { this.name = name; } Person.prototype = { constructor: Person, getName: function() { console.log(this.name); } }; var person1 = new Person(); // 4.1 动态原型模式 // 注意:使用动态原型模式时,不能用对象字面量重写原型 function Person(name) { this.name = name; if (typeof this.getName != "function") { Person.prototype.getName = function() { console.log(this.name); } } } var person1 = new Person(); // 如果你就是想用字面量方式写代码,可以尝试下这种: function Person(name) { this.name = name; if (typeof this.getName != "function") { Person.prototype = { constructor: Person, getName: function() { console.log(this.name); } } return new Person(name); } } var person1 = new Person('kevin'); var person2 = new Person('daisy');
相关文章推荐
- javascript之创建对象的多种方式以及优缺点
- 以支持多种浏览器的方式创建XMLHttpRequest对象
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 14.JavaScript深入之创建对象的多种方式以及优缺点
- js创建对象的多种方式及优缺点
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- js创建对象的多种方式及优缺点
- JavaScript深入之创建对象的多种方式以及优缺点
- 对象的多种创建方式
- JS中多种方式创建对象详解
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 对于SQL Server 对象名 XXX 无效 的多种有效处理方式(hibernate自动创建、数据库移植)
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- 深入理解JavaScript创建对象的多种方式以及优缺点
- JS中多种方式创建对象详解
- 以支持多种浏览器的方式创建 XMLHttpRequest 对象
- javascript 面向对象(多种创建对象的方式)
- 面向对象在javascript中的实践之多种方式创建对象
- JS中多种方式创建对象