js New乙個函式和直接呼叫的區別

2022-08-20 02:27:11 字數 735 閱讀 9573

使用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...