javascript中new关键字详解_基础知识

javascript中new关键字详解_基础知识

ID:30777766

大小:64.50 KB

页数:5页

时间:2019-01-03

javascript中new关键字详解_基础知识_第1页
javascript中new关键字详解_基础知识_第2页
javascript中new关键字详解_基础知识_第3页
javascript中new关键字详解_基础知识_第4页
javascript中new关键字详解_基础知识_第5页
资源描述:

《javascript中new关键字详解_基础知识》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、javascript中new关键字详解和其他高级语言一样javascript中也有new关键字,我们以前认知的new是用来创建一个类的实例对象,但在js中万物皆是对象,为何还耍new关键字呢,其实js中new关键字不是用來创建一个类的实例对象,而是用于继承。接下來,本文将带你-•起来探索JS中new的奥秘・・・functionAnimal(name){this.name二name;}Animal,color=,,black,/;Animal,prototype.say=function(){console.logCl'm"+this,name);};

2、varcat二newAnimal("cat");console・Iog(cat.name,//catcat.height//undefined);cat.say();//I'mcatconsole.log(Animal.name,//AnimalAnimal,color//back);Animal,say();//Animal.sayisnotafunction如果你能理解上面输出的结果,说明你已非常了解jsipnew和this的运行机制,请忽略本文!我们将通过解析这个例子来加深你对js«

3、lncw和继承的理解!【如果你对js的this还不了解,请先

4、阅读: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和c

5、olor属性,并调用say方法。二、重点解析第8行代码是关键:varcat二newAnimal(,zcat,z);JS引擎在执行这句代码时,做了很多工作,用伪代码模拟其工作流程如下:varobj={};obj._proto_=Animal,prototype;varresult二Animal.call(obj,〃cat〃);returntypeofresult二二二'obj'?result:obj;(1)创建一个空对象obj;(2)把obj的—proto_指向Animal的原型对象prototype,此时便建立了obj对象的原型链:obj-〉Anim

6、al.prototype->Object.prototype-〉nul1【如果你不了解JS原型链,请先阅读:JS原型和原型链】(3)在obj对象的执行空间调用Animal函数并传递参数“cat”°相当于varresuIt二obj.Animal(z,cat〃)。当这句执行完Z后,obj便产生了属性name并赋值为,zcat【关于JS中call的用法请阅读:JS的call和apply](4)考察第3步返回的返回值,如果无返回值或者返回一个非对象值,则将obj返回作为新对象;否则会将返回值作为新对象返回。了解了new的运行机制后,我们知道cat其实就是过

7、程(4)的返回值,因此我们对cat对彖的认知就多了一些:cat的原型链是:obj->Animal.prototype->Object.prototype->nul1cat上新增了一个屈性:name分析完了cat的产生过程,我们再看看输出结果:cat.name->在过程(3)中,obj对彖就产生了name属性。因此cat.name就是这里的obj.namecat.color->cat会先查找自身的color,没冇找到便会沿着原型链查找,在上述例了中,我们仅在Animal对象上定义了color,并没有在其原型链上定义,因此找不到。cat.say->cat

8、会先查找口身的say方法,没有找到便会沿着原型链查找,在上述例子中,我们在Animal的prototype上定义了say,因此在原型链上找到了say方法。另外,在say方法中还访问this,name,这里的this指的是其调用者obj,因此输岀的是obj.name的值。对于Animal来说,它本身也是一个对彖,因此,它在访问属性和方法时也遵守上述查找规则,所以:Animal,color->"black"Animal,name->"Animal",Animal先査找自身的name,找到了name,注意:但这个name不是我们定义的name,jfij是函

9、数对象内置的屈性。一般情况下,函数对彖在产牛时会内置name属性并将函数名作为赋值(仅函数对象)。Anima

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。