search

Home  >  Q&A  >  body text

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

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

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

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

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

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

阿神阿神2902 days ago447

reply all(4)I'll reply

  • 怪我咯

    怪我咯2017-04-10 14:37:44

    简化下

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

    相当于:

    Test.call(null)
    
    new Test()
    

    相当于:

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

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-10 14:37:44

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

    reply
    0
  • 天蓬老师

    天蓬老师2017-04-10 14:37:44

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

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

    reply
    0
  • 大家讲道理

    大家讲道理2017-04-10 14:37:44

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

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

    reply
    0
  • Cancelreply