js中创建对象的几种模式

什么是对象:
无序属性的集合,其属性可以包含基本值,对象或者函数把 ECMAScript 的对象想象成散列表:无非就是一组名值对,其中值可以是数据或函数
接下里就说创建对象几种模式下的优缺点
【js中创建对象的几种模式】1.工厂模式
显示创建对象
显示返回一个对象
缺点:无法判断对象类型

function factory(name, age, sex) { var obj = new Object(); obj.name = name; obj.age = age; obj.sex = sex; return obj; } var obj1 = factory('yyqx', 18, 'nan'); console.log(obj1);

2.构造函数模式
不能显示创建对象
隐式新的对象
能判断对象类型
缺点:因私有而冗余 所有的方法和属性都会在实例上创建一遍
function Factory(name, age, sex) { this.name = name; this.age = age; this.sex = sex; this.eat = function(food) { console.log('我只会' + food) } }var str = new Factory('yyqx', 18, 'nan'); console.log(str); str.eat('饭');

模拟构造函数创建对象
var obj = {}; Factory.call(obj, 'll', 18, 'girl'); obj.__proto__ = Factory.prototype;

3.原型模式
将属性和方法都放在原型对象上
因为共享特性 导致原型上引用类型在各个实例上都会有影响
原型中所有属性是被实例共享的
对于包含引用类型值的属性来说 问题很大
function Hyj() {} console.log(Hyj.prototype); Hyj.prototype.name = 'yyqx'; Hyj.prototype.age = '18'; Hyj.prototype.sex = 'nan'; Hyj.prototype.eat = function(food) { console.log('我侄子会' + food) }console.log(Hyj.prototype); Hyj.prototype.eat('饭');

**4.构造+原型
私有属性 function Factory(name, age, sex) { this.name = name; this.age = age; this.sex = sex; } 共有属性 Factory.prototype.aet = function(food) { console.log('我知乎' + food) }var str = new Factory('yyqx', 18, 'nv'); console.log(str) Factory.prototype.aet('fan');

希望我的理解可以给你们提供一些帮助,学识有限,如果有地方出现错误或者有更好的方法去实现,欢迎私信!

    推荐阅读