function Test (word) { console.log (word); } Test('哈哈,我是函數'); new Test('哈哈,我是對象'); //將以上的調用方式換種通俗易懂的方式 Test.call("哈哈,我是函數"); //相當於Test(); //相當於new Test(); var obj = {}; obj._proto_ = Test.prototype; Test.call(obj);
本質的區別就是,兩次調用之中的this不同。調用Test('...');
的時候,里面的this是頂級對象window
,返回值是undefined。調用new Test('...');
的時候,它會先new一個對象,置類型為Test,之后把它作為this執行Test
函數,最后再把對象返回。
來源於sf