如何解决函数`function`中Javascript`new`的奇怪行为
我遇到了令我惊讶的事情。请考虑以下四个功能:
function A() {
this.q = 1;
}
function B() {
this.q = 1;
return this;
}
function C() {
this.q = 1;
return 42;
}
function D() {
this.q = 1;
return {};
}
,让我们通过所有对象创建对象(通过new
)
console.log('a',new A());
console.log('b',new B());
console.log('c',new C());
console.log('d',new D());
这是输出:
a A { q: 1 }
b B { q: 1 }
c C { q: 1 }
d {}
前三个似乎表明函数返回什么并不重要,JS只关心每个函数对this
所做的操作(这是我以前的看法,顺便说一句)。但是最后一个与此矛盾。
那么,这是怎么回事?我修改后的规则是“如果函数返回Object
,则保留该值;否则,保留this
”。但是我对此不太确定。
解决方法
在JavaScript中,当您调用不带test()
之类的新函数时,它将仅运行该函数并执行它。返回该函数返回的内容
当您使用new test()
之类的新函数调用函数时,它期望return语句返回一个对象,否则返回this
对象。
如此
function test() {
this.q = 1
}
test(); // return undefined
new test(); // return {q:1}
,
使用 new 运算符时,它会创建一个对象。
返回值符合预期。如果在返回中是一个对象,则将返回该对象;否则,如果返回是一个函数,则将返回该函数。
function A(){
this.b = 3;
return function(){return 4;};
}
function B(){
this.b = 3;
return { d:4};
}
console.log(typeof (new A())); //function
console.log(typeof (new B())); //object {d:4}
如果返回中没有其他值或不存在,则此运算符将优先作为对象返回。
function C(){
this.b = 3;
return "78";
}
console.log(typeof (new C())); // object {b:3}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。