这两个让我有点傻傻分不清楚了,因为它们的定义过程除开prototype
部分,是完全相同的!比如
function Test (word) {
console.log (word);
}
Test('哈哈,我是函数');
new Test('哈哈,我是对象');
这两者除了返回值有区别外,还有啥本质的区别么?
这两个让我有点傻傻分不清楚了,因为它们的定义过程除开prototype
部分,是完全相同的!比如
function Test (word) {
console.log (word);
}
Test('哈哈,我是函数');
new Test('哈哈,我是对象');
这两者除了返回值有区别外,还有啥本质的区别么?
本质的区别就是,两次调用之中的this不同。调用Test('...');
的时候,里面的this是顶级对象window
,返回值是undefined。调用new Test('...');
的时候,它会先new一个对象,置类型为Test,之后把它作为this执行Test
函数,最后再把对象返回。
你这样写当然看不出来,但如果把那句话改成this.word = word;
就一清二楚了。调用第一个之后,word属性存在于window
中。调用第二个之后,word属性存在于返回的那个对象之中。
第一种返回值是 undefined
第二种返回值是个以 Test 为构造器的空对象(插一句,这里的空对象是new关键字产生的,函数 Test 本身也仅仅是正常执行而已)
你如果不打算获得它们的返回值的话,从结果上来说,把它们当成一样的也无妨
和java不同,js里函数本来就是一种对象,没什么特别区分的必要
8 回答4.8k 阅读✓ 已解决
6 回答3.5k 阅读✓ 已解决
5 回答2.9k 阅读✓ 已解决
5 回答6.4k 阅读✓ 已解决
4 回答2.3k 阅读✓ 已解决
4 回答2.8k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
简化下
相当于:
相当于: