稳妥构造函数模式和工厂模式创建对象有什么区别
答案:1 悬赏:20 手机版
解决时间 2021-02-21 19:53
- 提问者网友:我没有何以琛的痴心不悔
- 2021-02-21 11:23
稳妥构造函数模式和工厂模式创建对象有什么区别
最佳答案
- 五星知识达人网友:廢物販賣機
- 2021-02-21 12:07
题主可以看下《javascipt高级程序设计》第6.2章[创建对象]部分,我也是名初学者,回答如有误请各位大大帮忙指出 ^_^ 。 题主想弄清问题需要了解下工厂模式、稳妥构造函数模式与寄生构造函数模式三种方法的差异; 工厂模式: function createPerson( name, age, job ) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(this.name); } return o; } var person1 = createPerson("Nicholas", 29, "software Engineer"); var person2 = createPerson("Greg", 27, "Doctor"); person1.sayName(); //"Nicholas" person2.sayName(); //"Greg" 寄生构造函数模式: var person1 = new createPerson("Nicholas", 29, "software Engineer"); 寄生构造函数模式与工厂模式的区别是使用了new操作符把createPerson函数作为构造函数,其实是跟工厂模式一模一样的。 稳妥构造函数模式: function Person( name, age, job ) { var o = new Object(); o.name = name; o.age = age; o.job = job; o.sayName = function() { alert(name); //注意这里没有了“this”; }; return o; } var person = Person("Nicholas", 29, "software Engineer"); Person.sayName(); //"Nicholas" 稳妥构造函数采用的是与寄生构造函数模式相似的模式,除了下列两点不同: 1.创建对象的实例方法不引用this; 2.不使用new调用构造函数; 所以构造函数适合在禁用this和new的环境中使用(或者说设计的出发点)。 特性: *由于添加方法时去掉了"this",即使修改所创建对象的属性: person.name = "Greg"; 也可以通过sayName方法访问创建对象时的原始数据: person.sayName(); //仍为“Nicholas” 三种模式都不能确定所创建对象的类型,题主想了解更多可以在高级程序设计书中了解。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯