码迷,mamicode.com
首页 > Web开发 > 详细

js new的理解

时间:2017-05-09 23:12:42      阅读:362      评论:0      收藏:0      [点我收藏+]

标签:了解   js原型   原型链   animal   cat   代码   src   anim   环境   

var cat = new Animal("cat");

JS引擎执行这句代码时,在内部做了很多工作,用伪代码模拟其工作流程如下:

技术分享
new Animal("cat") = {

    var obj = {};

    obj.__proto__ = Animal.prototype;

    var result = Animal.call(obj,"cat");

    return typeof result === ‘object‘? result : obj;
}
技术分享

(1)创建一个空对象obj;

(2)把obj的__proto__ 指向Animal的原型对象prototype,此时便建立了obj对象的原型链:obj->Animal.prototype->Object.prototype->null

      【如果你不了解JS原型链,请先阅读:JS原型和原型链

(3)在obj对象的执行环境调用Animal函数并传递参数“cat”。 相当于var result = obj.Animal("cat")。

       当这句执行完之后,obj便产生了属性name并赋值为"cat"。【关于JS中call的用法请阅读:JS的call和apply

(4)考察第3步返回的返回值,如果无返回值或者返回一个非对象值,则将obj返回作为新对象;否则会将返回值作为新对象返回。

js new的理解

标签:了解   js原型   原型链   animal   cat   代码   src   anim   环境   

原文地址:http://www.cnblogs.com/taojunlong/p/6833125.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!