javascript里面对象和函数的区别?

这两个让我有点傻傻分不清楚了,因为它们的定义过程除开prototype部分,是完全相同的!比如

function Test (word) {
    console.log (word);
}

Test('哈哈,我是函数');

new Test('哈哈,我是对象');

这两者除了返回值有区别外,还有啥本质的区别么?

阅读 10.4k
4 个回答

简化下

function Test() {
  console.log(this);
}
Test()

相当于:

Test.call(null)
new Test()

相当于:

var obj = {};
obj.__proto__ = Test.prototype;
Test.call(obj);

本质的区别就是,两次调用之中的this不同。调用Test('...');的时候,里面的this是顶级对象window,返回值是undefined。调用new Test('...');的时候,它会先new一个对象,置类型为Test,之后把它作为this执行Test函数,最后再把对象返回。
你这样写当然看不出来,但如果把那句话改成this.word = word;就一清二楚了。调用第一个之后,word属性存在于window中。调用第二个之后,word属性存在于返回的那个对象之中。

第一种返回值是 undefined
第二种返回值是个以 Test 为构造器的空对象(插一句,这里的空对象是new关键字产生的,函数 Test 本身也仅仅是正常执行而已)

你如果不打算获得它们的返回值的话,从结果上来说,把它们当成一样的也无妨
和java不同,js里函数本来就是一种对象,没什么特别区分的必要

返回值有什么区别,都是没有返回。

new的时候,会产生新的作用域。而没有用new只是简单的调用。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏