使用new是建構函式,不使用new是函式呼叫,同時this指向不同。
示例:function test(name, age, job) {
console.log(this);
this.name = name;
this.age = age;
this.job = job;
1、直接呼叫函式
var test1 = test('tom', 27, 'it');
來看下test1的值:
console.log(test1); // undefined
直接呼叫上下文指向是window
2、使用new建構函式
var test2 = new test('tom', 27, 'it');
來看下test2的值:
console.log(test2);
console.log(typeof test2); // "object"
new會使執行函式的上下文指向這個函式的本身。
最後得出乙個猜測:
如果函式返回值為常規意義上的值型別(number、string、boolean)時,new 函式將會返回乙個該函式的例項物件,而如果函式返回乙個引用型別(object、array、function),雖然new函式與直接呼叫函式產生的結果等同,但是是兩個不同的過程,乙個是構造物件、乙個是函式呼叫。
模擬乙個js new乙個物件的過程
function person person.prototype.getname function function createobj var a createobj person console.log a 上述 createobj 模擬了js new乙個物件的過程,從該函式的 中可以清晰的看到...
呼叫scanf函式的乙個陷阱
我們在寫c程式時,經常使用scanf函式,讓使用者輸入資料,可是有時候會出現一些很奇怪的問題。例如,下面的程式是乙個簡單的四則運算 include int main printf 運算結果是 d n result return 0 此程式不管從語法,還是邏輯上,都沒有問題,且編譯也能通過。實際執行時...
函式指標呼叫和直接函式呼叫的反彙編對比
本文主要從x86彙編一級來檢視函式呼叫和函式指標呼叫函式的差別。具體看如下的兩個函式 void show void showdata int a 下面是兩者彙編 對比 18 show 00411aae e8 3d f6 ff ff call show 4110f0h 19 20 void ptrsh...