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

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

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

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

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

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

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


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

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


简化下

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

相当于:

Test.call(null)
new Test()

相当于:

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

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

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


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

【热门文章】
【热门文章】