new的探究

new操作符易用,但是往往容易忽略对其的理解。

var foo= new Foo();

这个简单的语句,涉及到了一系列的步骤:

  1),给对象开辟内存,即 var foo= {};

  2),修改新对象的隐式原型对象,即 foo.__proto__ = Foo.prototype;

  3),在foo上下文中执行Foo函数,即 Foo.call(foo,arguments);

这样,我们就得到了一个隐式原型指向Foo.prototype的对象。

但是,在构造函数Foo 的实现中,其返回的值会因为返回值类型的不同而导致foo的值不同。

  1),若在Foo构造函数中返回基本类型值,即string,number,boolean,null,undefined,则默认

    返回该类型的实例。

  2),若返回值为引用(包括对象,数组,函数)类型,则返回该值。

也可以以匿名函数作为构造函数返回一些引用类型,最常用的莫过于通过匿名构造函数构造闭包。

var lists = document.getElementsByTagName("li");
for(var i=0,l=lists.length; i < l; i++){
  lists[i].onclick = new function(){
    var t = i;
    return function(){
      alert(t+1)
    }
  }
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Blob初探

    简介   Blob在js中意味着二进制大数据。实现该接口的对象有3个属性,分别是type(MIME),size(byte)和 一个切割方法:slice(在大文件...

    欲休
  • 关于首屏时间采集自动化的解决方案

    关于首屏 首屏时间是指从转向该页面到屏幕中该页面所有内容都可见时的时间。已经有太多的关于首屏时间的计算,在本文中并不重复阐述这些已经被提出或者实现的方案,而旨...

    欲休
  • 支持多用户web终端实现及安全保障(nodejs)

    背景 terminal(命令行)作为本地IDE普遍拥有的功能,对项目的git操作以及文件操作有着非常强大的支持。对于WebIDE,在没有web伪终端的情况...

    欲休
  • 「Android」通过注解自动生成类文件:APT实战(AbstractProcessor)

    最近在做一个自动生成代码的架构,这两天调研了一下APT自动生成代码的流程,动手写了个小demo。

    用户7744319
  • Script Lab 版,九九乘法表,Excel 基础操作(2)

    女儿二年级了,开始学习乘法,天天回家背一篇九九乘法口决表。暂时还没人投稿,所以就想到用九九乘法表来做一个实例吧,也算有点小小的用处。

    寒树Office与RPA
  • 函数柯里化(Currying)和偏函数应用(部分应用函数)(Partial Application)的比较

    【名词解释】Currying:因为是美国数理逻辑学家哈斯凯尔·加里(Haskell Curry)发明了这种函数使用技巧,所以这样用法就以他的名字命名为 Curr...

    Albert陈凯
  • np.random.random()函数 参数用法以及numpy.random系列函数大全

    原文链接:https://www.cnblogs.com/DOMLX/p/9751471.html

    徐飞机
  • 群友问了道3行代码的python面试题,我懵逼了...

    第一眼看,不就是匿名函数吗?但是仔细想想匿名函数在平时的开发中没怎么用,所以也忘的差不多了。例如那个m(2)当时就不懂是啥意思了。

    Python进击者
  • 机器学习工具可以发现肿瘤中的突变,比现有模型更准确

    癌症肿瘤不断生长和进化,它们的DNA也是如此。究竟DNA如何变化是重要的信息,因为它会影响医生的治疗决策。

    AiTechYun
  • SoundNet:根据声音来识别场景环境实践

    声音也是识别对象的一种重要数据源。其中根据声音来识别声音所处的环境也是语音识别的研究内容之一。今天对NIPS 2016年的这篇文章SoundNet: Learn...

    sparkexpert

扫码关注云+社区

领取腾讯云代金券