javascript中new关键字详解_基础知识.doc:..javascript中new关键字详解和其他高级语言一样javascript中也有new关键字,我们以前认知的new是用来创建一个类的实例对象,但在js中万物皆是对象,为何还耍new关键字呢,其实js中new关键字不是用來创建一个类的实例对象,而是用于继承。接下來,本文将带你-•起来探索JS中new的奥秘・・・functionAnimal(name){;}Animal,color=,,black,/;Animal,=function(){'m"+this,name);};varcat二newAnimal("cat");console・Iog(,////undefined);();//I'(,//AnimalAnimal,color//back);Animal,say();//,说明你已非常了解jsipnew和this的运行机制,请忽略本文!我们将通过解析这个例子来加深你对js«|lncw和继承的理解!【如果你对js的this还不了解,请先阅读:JS作用域和this关键字】一、代码解读1-3行创建了一个函数Animal,并在其this上定义了属性:name,name的值是函数被执行时的形参。第4彳亍在Animal对彖(Animal本身是一个函数对彖)上定义了一个静态属性:color,并赋值“black”5-7行在Animal函数的原型对象prototype±定义了一个say()方法,say方法输出了this的name值。第8行通过new关键字创建了一个新对象cat10-14行cat对象尝试访问name和color属性,并调用say方法。16-20彳亍Animal对象尝试访问name和color属性,并调用say方法。二、重点解析第8行代码是关键:varcat二newAnimal(,zcat,z);JS引擎在执行这句代码时,做了很多工作,用伪代码模拟其工作流程如下:varobj={};=Animal,prototype;(obj,〃cat〃);returntypeofresult二二二'obj'?result:obj;(1)创建一个空对象obj;(2)把obj的—proto_指向Animal的原型对象prototype,此时便建立了obj对象的原型链:obj-〉->-〉nul1【如果你不了解JS原型链,请先阅读:JS原型和原型链】(3)在obj对象的执行空间调用Animal函数并传递参数“cat”°(z,cat〃)。当这句执行完Z后,obj便产生了属性name并赋值为,zcat\【关于JS中call的用法请阅读:JS的call和apply](4)考察第3步返回的返回值,如果无返回值或者返回一个非对象值,则将obj返回作为新对象;
javascript中new关键字详解 基础知识 来自淘豆网m.daumloan.com转载请标明出处.