老师能不能 讲一下 这个代码的运行过程?

老师能不能 讲一下 这个代码的运行过程?

//安全模式创建的工厂方法函数 var UserFactory = function (role) {    if (this instanceof UserFactory) {        var s = new this[role]();        return s;    } else {        return new UserFactory(role);    } } //工厂方法函数的原型中设置所有对象的构造函数 UserFactory.prototype = {    Admin: function () {        this.name = "管理员";        this.viewPage = ['首页', '查询', '权限管理'];    },    User: function () {        this.name = '用户';        this.viewPage = ['首页', '查询'];    }   } //调用 var admin = UserFactory('Admin'); var user = UserFactory('User');





老师能不能 讲一下 这个代码的运行过程?

var admin = UserFactory('Admin');

调用时 为啥会进入else语句?

正在回答

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

1回答

同学你好,以下仅供参考:

在浏览器中可以通过打断点来看js的走向使用方法如下。

1、打开控制台

2、选择Sources选项

3、将希望得知的js走向在左侧数字栏中用鼠标点击一下就会出蓝色的标记。

4、一切做好后刷新页面

5、点击https://img1.sycdn.imooc.com//climg/6344e74b09c681a005520049.jpg小箭头就可以进行看执行步骤了。

6、在js代码中可以通过鼠标移入的方式看到当前的信息https://img1.sycdn.imooc.com//climg/6344e7880986b2a506000083.jpg

如下:

https://img1.sycdn.imooc.com//climg/6344e54f09bfea2215150650.jpg

https://img1.sycdn.imooc.com//climg/6344e5c10983c63115130590.jpg

那么程序就会调用Admin。User也一样如下:

https://img1.sycdn.imooc.com//climg/6344e65809a9443313330765.jpg

关于为什么会走else是因为一开始调用时this指向的是window,而不是UserFactory。以下仅供同学参考:

在全局下调用UserFactory函数,也就是方法中的this指向window

http://img1.sycdn.imooc.com//climg/60cffc25092df29a06750172.jpg

else语句中实例化UserFactory函数为对象,实际上也再次调用了函数,那么会再次判断,这时候this指向UserFactory对象,满足if语句,调用相应的方法,实例化为对象并返回

http://img1.sycdn.imooc.com//climg/60cffcce09e306ec08160518.jpg

同学试试,祝学习愉快!

  • 慕粉8153980 提问者 #1

    明白了 谢谢老师

    2022-10-11 12:03:33
  •  return new UserFactory(role);

    老师,我想问一下 UserFactory 本身是函数但通过"new" 变成实例的对象,再一次调用函数,此时的this是不是指向通过"new" 把UserFactory函数变成实例的对象?

    2022-12-11 23:05:14
  • 同学你好,理解是的是对的,可以通过console打印一下看看结果如下:

    https://img1.sycdn.imooc.com//climg/6395f64209600c6b12680538.jpg

    https://img1.sycdn.imooc.com//climg/6395f650093c62d918770298.jpg

    祝学习愉快!

    2022-12-11 23:25:11
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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