为什么工厂模式调用的时候不需要加new,而另外两个模式要呢? 因为后两种都是构建函数吗?

为什么工厂模式调用的时候不需要加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>


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,可以简单的理解为是因为后两种函数是构造函数。

  1. 工厂模式是在函数内声明一个对象,给这个对象添加属性和方法,最后通过return将这个对象的引用暴露出去,这样调用函数之后就可以拿到对象的引用,访问对象的属性和方法, 所以不需要使用new关键字。 

  2. 原型模式实在原型上定义共有的属性和方法,所以需要使用new关键字创建实例对象,然后实例对象通过原型链查找原型上的属性和方法

  3. 混合模式是将属性定义在构造函数内部, 将方法定义在原型上,需要使用原型链查找原型上的方法所以使用new关键字。

另, 同学代码正确,效果实现的很棒, 继续加油哦

如果帮助到了你, 欢迎采纳!

祝学习愉快~~~

  • 为你浅笑 提问者 #1
    能详细解释下什么是实例化吗?百度了好多大佬的回答,没理解透,可以理解成有一个构造函数是生成某一种对象的函数,也就是说相当于一个对象模板,然后new一下这个函数就相当于实例化了吗?
    2019-07-03 11:28:18
  • 好帮手慕慕子 回复 提问者 为你浅笑 #2
    同学你好,你这样理解也是可以的。 目前阶段,我们不需要研究的很透彻, 简单了解原理,会使用即可, 在以后的学习中多练习结合代码效果理解, 等我们的知识积累到一定程度的时候, 在返回来深入研究这一块会更容易哦,祝学习愉快~~~
    2019-07-03 13:05:54
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师