js的工厂模式和构造函数

转载 (原文地址) 王者归来 随笔 js 226阅读 2018-04-05 23:44:54 举报

作为创建对象的几种模式之一,构造函数用的非常之多,相比于工厂模式来看看new做了些啥?

JavaScript运行复制全屏

1
function foo(name, age) {
2
var obj = {};
3
obj.name = name;
4
obj.age = age;
5
return obj;
6
}
7
var foo1 = foo('hehe',21);
8
var foo2 = foo('yaya',20);
JavaScript运行复制全屏

1
function Foo(name, age) {
2
this.name = name;
3
this.age = age;
4
}
5
var foo1 = new Foo('hehe',21);
6
var foo2 = new Foo('yaya',20);
对比可以发现,构造函数:

没有显示创建对象
将属性和方法赋给this对象
没有显示return创建的新对象
创建实例使用new操作符
再来看看new做了些啥?

创建一个新对象
this指向新对象
返回新对象
新对象:
工厂模式:显示创建,显示返回
构造函数:
var foo1 = { 'proto': Foo.prototype };(这是md的通病吗,两条下划线没法正确显示)

this:
工厂模式:指向创建的新对象obj
构造函数:
动态指向foo1,Foo.apply(foo1, arguments);

return值:
工厂模式:return obj
构造函数:return foo1

注意:构造函数默认返回值为新对象,如果显示返回一个引用类型,则返回值为引用类型,如果返回简单类型则忽略,返回值仍为新对象

JavaScript运行复制全屏

1
function foo(name, age) {
2
this.name = name;
3
this.age = age;
4
return obj = {
5
country: 'China'
6
}
7
}
8
var foo1 = new foo('hehe',21);
9
var foo2 = new foo('yaya',20);
10
console.log(foo2);
返回值为{country: 'China'}

评论 ( 0 )
最新评论
暂无评论

赶紧努力消灭 0 回复