js构造函数创建对象是否加new问题

 更新时间:2018年01月22日 08:57:50   投稿:laozhang  
本篇文章主要给大家详细分析了js构造函数创建对象加new与不加new的问题,有这方面兴趣的参考学习下。

今天看到这样一道题:

填写"TO DO"处的内容让下面代码支持a.name = "name1"; b.name = "name2";

function Obj(name){
// TO DO
}
obj. /* TO DO */ = "name2";
var a = Obj("name1");
var b = new Obj;

 

问题1:new操作符做了些什么呢?

创建一个新对象;

将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象) ;

执行构造函数中的代码(为这个新对象添加属性) ;

返回新对象。

问题2:不加new操作符直接执行构造函数会发生什呢?

function Obj(name){
this.name = name;
console.log(this); // 严格模式下是undefined 非严格模式下是window对象
}
var a = Obj("name1");
console.log(a); // 结果 => undefined

哦,原来只是当作正常的函数调用来执行,Obj没有返回值,故a是undefined。

两者区别总结

使用new操作符创建对象,并且构造函数没有返回值或者返回为基本数据类型,那么返回该对象,如下例:

function Obj(name){
this.name = name;
}
var b = new Obj;
console.log(b); // Obj { name: undefined }
function Obj(name){
this.name = name;
return 'chic';
}
var b = new Obj;
console.log(b); // 同上

如果构造函数返回一个引用类型:

function Obj(name){
this.name = name;
return {};
}
var b = new Obj;
console.log(b); // {}

总结

对于不加new来执行构造函数来说,返回值就是构造函数的执行结果;对于加new关键字来执行构造函数而言,如果return的是基本数据类型,那么忽视掉该return值,如果返回的是一个引用类型,那么返回该引用类型。

那么问题答案你有了吗?

参考答案 :

function Obj(name){
this.name = name;
return this;
}
Obj.prototype.name = "name2";
var a = Obj("name1");
var b = new Obj;

以上就是我们给大家整理的js构造函数创建对象是否加new问题的全部内容,大家阅读后还有疑问可以在下方留言区讨论,感谢你对脚本之家的支持。

相关文章

  • js中AppendChild与insertBefore的用法详细解析

    js中AppendChild与insertBefore的用法详细解析

    这篇文章主要是对js中AppendChild与insertBefore的用法进行了详细的分析介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2013-12-12
  • 原生JS实现的雪花飘落动画效果

    原生JS实现的雪花飘落动画效果

    这篇文章主要介绍了原生JS实现的雪花飘落动画效果,涉及javascript数值运算及页面元素属性动态操作相关实现技巧,需要的朋友可以参考下
    2018-05-05
  • 小程序使用watch监听数据变化的方法详解

    小程序使用watch监听数据变化的方法详解

    这篇文章主要介绍了小程序使用watch监听数据变化的方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 单线程JavaScript实现异步过程详解

    单线程JavaScript实现异步过程详解

    这篇文章主要介绍了单线程JavaScript实现异步过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • Cropper.js入门之在HTML中实现交互式图像裁剪

    Cropper.js入门之在HTML中实现交互式图像裁剪

    这篇文章主要为大家介绍了Cropper.js入门之在HTML中实现交互式图像裁剪示例解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • BootStrap的双日历时间控件使用

    BootStrap的双日历时间控件使用

    这段时间看了下bootstrap的时间控件,发现使用起来还是很简单的,趁着有时间的时候整理了一下,特此分享到脚本之家平台,感兴趣的朋友参考下
    2017-07-07
  • 仿京东快报向上滚动的实例

    仿京东快报向上滚动的实例

    下面小编就为大家分享一篇仿京东快报向上滚动的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-12-12
  • js实现鼠标移动到图片产生遮罩效果

    js实现鼠标移动到图片产生遮罩效果

    这篇文章主要为大家详细介绍了js实现鼠标移动到图片产生遮罩效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • js图片翻书效果代码分享

    js图片翻书效果代码分享

    这篇文章主要介绍了js实现图片翻书效果,代码简单,效果很棒,感兴趣的小伙伴们可以参考一下
    2015-08-08
  • JS实战篇之收缩菜单表单布局

    JS实战篇之收缩菜单表单布局

    这篇文章主要介绍了JS实战篇之收缩菜单表单布局的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12

最新评论