为什么工厂模式调用的时候不需要加new,而另外两个模式要呢? 因为后两种都是构建函数吗?
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<script type="text/javascript">
// 工厂模式
function createObject(name,action){
var obj=new Object();
obj.name=name;
obj.action=action;
return obj;
}
var box=createObject("imooc",function(){alert("前端")});
console.log(box.name);
box.action();
// 原型模式
function nObject(){
};
nObject.prototype.name="miooc";
nObject.prototype.action=function(){
alert("前端工程师");
}
var box1=new nObject();
alert(box1.name);
box1.action();
// 混合模式
function mObject(name){
this.name=name;
}
mObject.prototype.action=function(){
alert("前端工程师加油!");
}
var box2=new mObject("imooc");
document.write(box2.name);
box2.action();
</script>
</body>
</html>
正在回答
同学你好,可以简单的理解为是因为后两种函数是构造函数。
工厂模式是在函数内声明一个对象,给这个对象添加属性和方法,最后通过return将这个对象的引用暴露出去,这样调用函数之后就可以拿到对象的引用,访问对象的属性和方法, 所以不需要使用new关键字。
原型模式实在原型上定义共有的属性和方法,所以需要使用new关键字创建实例对象,然后实例对象通过原型链查找原型上的属性和方法
混合模式是将属性定义在构造函数内部, 将方法定义在原型上,需要使用原型链查找原型上的方法所以使用new关键字。
另, 同学代码正确,效果实现的很棒, 继续加油哦
如果帮助到了你, 欢迎采纳!
祝学习愉快~~~
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星