首页IT科技js是啥品牌(js之new的原理和源码)

js是啥品牌(js之new的原理和源码)

时间2025-05-02 12:50:29分类IT科技浏览3140
导读:function...

function Student(name,age){ this.name=name; this.age=age; } var stu=new Student("小明",18);

观察上述代码            ,Student是一个普通的构造函数                 ,然后通过new对构造函数实例化得到了一个Student类型的数据           。

实例语句里面的关系有如下三点:

①:stu.__proto__===Student.prototype;

②:根据规则     ,当构造函数没有参数的时候            ,()可以省略                 。故可知                  ,Student("小明",18)并不是对构造函数的调用     ,这里new还主动调用了构造函数

③:new还创造了一个容器      ,让这个容器去调用这个构造函数                  ,并且来装产生的数据对象           ,并且最后返回这个填装完毕的对象

故当你写下一个new关键字时      ,new实质上就做了如上三件事
new的最终目的:
创造一个构造函数类别的对象出来                  ,就像new date造出来的是date对象           ,new array造出来的 是Array对象一样,并且保证这里面的一些继承关系不能乱
new关键字源码:
构造函数:
function Student(name,age){ this.name=name; this.age=age; }

mynew函数:

1 function mynew(fn,name,age){ 2 var obj={}; 3 // 修改原型关系                  ,确定obj一定是由fn造出来的 4 obj.__proto__=fn.prototype; 5 // obj本身没有fn方法                 ,fn是window对象的,于是obj带着借fn所要求的参数去向window借            ,这样的话                 ,fn借来后obj就可以用了     ,fn里的this什么的指向的也就是obj了            ,也可用apply或bind                  ,这也就是修改this指针的原理     ,this一般是谁调用指向谁 6 var result=fn.call(obj,name,age); 7 // 判断通过构造函数实例化的对象是否为对象      ,是的话就输出                  ,不是的话就输出新创建的obj 8 return result instanceof Object?result:obj; 9 }

调用:

console.log(mynew(Student,"小明",18)) ;

mynew不带形参的源码           ,除了mynew函数略有不同      ,其它均相同

function mynew(){ var obj={}; // 获取函数调用时传的第一个参数                  ,即为构造函数fn var fn=[].shift.call(arguments); // 修改原型关系           ,确定obj一定是由fn造出来的 obj.__proto__=fn.prototype; // 修改fn的this指针,arguements必须要转为以逗号相连的数据 fn.call(obj,...arguments); return obj; } console.log(mynew(Student,"小明",18)) ;

箭头函数不能写new:

注意箭头函数不能用来写new的源码                  ,

箭头函数没有自己的 this                 ,无法修改this指针 箭头函数没有自己的 prototype,无法修改原型对象
声明:本站所有文章            ,如无特殊说明或标注                 ,均为本站原创发布      。任何个人或组织     ,在未征得本站同意时            ,禁止复制           、盗用                 、采集      、发布本站内容到任何网站      、书籍等各类媒体平台      。如若本站内容侵犯了原著者的合法权益                  ,可联系我们进行处理                 。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
mac浏览器全屏(苹果电脑MAC浏览器全屏快捷键是什么) js异步编程的理解和认识(一文明白:JavaScript异步编程)