javascript - 这段代码这个地方是什么意思,有些不太明白
PHP中文网
PHP中文网 2017-04-11 09:18:52
[JavaScript讨论组]
function person(name){
          this.name=name;
      }
      person.prototype.getName=function(){
          return this.name;
      }
      var objectFactory=function(){
          
          var obj=new Object(),Constructor=[].shift.call(arguments);//这个地方不是太懂
          obj._proto_=Constructor.prototype;
          var ret=Constructor.apply(obj,arguments);
          return typeof ret==='object'?ret:obj;
      };
      var a=objectFactory(person,'sven');

最近在看原型继承,看到这个demo的时候不太明白,希望大神能指点一下。

PHP中文网
PHP中文网

认证0级讲师

全部回复(2)
大家讲道理

objectFactory是工厂方法,是用来批量生产某个类的示例对象的。这里的某个类,就是由第一个objectFactory的第一个参数决定的。Constructor=[].shift.call(arguments)这行代码,就是取出第一个参数,也就是上面所讲的某个类。至于var obj=new Object();obj._proto_=Constructor.prototype;这两句,比较新的写法是var obj = Object.create(Constructor.prototype)。因为你这个不是直接new出来的,所以要用__proto__Object.create。需要注意的是,var ret=Constructor.apply(obj,arguments);这行代码中的arguments对象已经被shift操作过咯,在上例中,此时的arguments是'sven'。

ringa_lee

第一个是定义构造函数,不过p要大写。然后向原型添加自定义方法。this.name=name得意思你可以看一下我写过的文章,关于作用域的问题。指向传入形参,下面传实参的值。
constructor应该是强制将某个变量指向这个原型。call()是对象冒充,也可以看一下我写的文章。哪里有错误请指正。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号