小编给大家分享一下如何解决js构造函数创建对象是否加new问题,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!
目前成都创新互联已为1000多家的企业提供了网站建设、域名、网络空间、网站改版维护、企业网站设计、乐平网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
今天看到这样一道题:
填写"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构造函数创建对象是否加new问题
文章来源:http://scpingwu.com/article/ijcoci.html