1. 程式人生 > >js new一個函數和直接調用函數的差別

js new一個函數和直接調用函數的差別

.get new javascrip 引用類型 類型 彈出 color pos 不同



用new和調用一個函數的差別:假設函數返回值是一個值類型(Number、String、Boolen)時,new函數將會返回這個函數的實例對象。而假設這個函數的返回值是一個引用類型(Object、Array、Funtion)時,new函數和直接調用函數的結果同樣。測試代碼例如以下:
<script type="text/javascript"> /*//工廠模式 function Person(name,age) { var o = new Object(); o.name = name; o.age = age; o.getName = function() { alert(this.name); } return o; } var obj1 = new Person("liwen",25); var obj2 = Person("liwen1",25); obj1.getName(); //liwen*/ new一個函數的實例對象 obj2.getName(); //liwen1*/ 直接調用

這裏new一個函數的對象和直接調用函數產生的結果同樣,都能夠彈出這個函數的name屬性。註意這裏函數的返回值是一個Funtion對象
/*假設一個函數中存在return語句,調用這個函數的時候使用new和不使用new返回的結果是一樣的嗎?*/ function Test() { this.name = ‘test‘; return function() { return true; } } //var test = new Test(); //function(){return true;} 它是Object //var test = Test(); //function(){return true;} 它是Function //alert(new Test() == Test()); //false 這就奇怪了。兩都明明是一樣的,都是函數,怎麽不同樣的,由於js對於Object和Funtion的比較是基於引用的。
//為了進一步分辨上述情形下兩者間的差別,再繼續看下面代碼 function Test() { this.name = "test"; return "test"; } var test1 = new Test(); //Object 對象,它有一個name 屬性,而且返回一個字符串test var test2 = Test(); //test ,它單純是一個字符串
/*通過上面的代碼,能夠得出一個推測:假設函數返回值為常規意義上的數值類型(Number、String、Boolean)時,new函數將會返回一個該函數的實例對象,而假設函數返回一個引用類型(Object、Array、Function)時,則new函數與直接調用函數產生的結果同樣*/
</script> 網上看的:用new和調用一個函數的差別:假設函數返回值是一個值類型(Number、String、Boolen)時,new函數將會返回這個函數的實例對象。而假設這個函數的返回值是一個引用類型(Object、Array、Funtion)時,new函數和直接調用函數的結果同樣。測試代碼例如以下:
<script type="text/javascript"> /*//工廠模式 function Person(name,age) { var o = new Object(); o.name = name; o.age = age; o.getName = function() { alert(this.name); } return o; } var obj1 = new Person("liwen",25); var obj2 = Person("liwen1",25); obj1.getName(); //liwen*/ new一個函數的實例對象 obj2.getName(); //liwen1*/ 直接調用

這裏new一個函數的對象和直接調用函數產生的結果同樣,都能夠彈出這個函數的name屬性。

註意這裏函數的返回值是一個Funtion對象


/*假設一個函數中存在return語句,調用這個函數的時候使用new和不使用new返回的結果是一樣的嗎?*/ function Test() { this.name = ‘test‘; return function() { return true; } } //var test = new Test(); //function(){return true;} 它是Object //var test = Test(); //function(){return true;} 它是Function //alert(new Test() == Test()); //false 這就奇怪了,兩都明明是一樣的。都是函數,怎麽不同樣的。由於js對於Object和Funtion的比較是基於引用的。
//為了進一步分辨上述情形下兩者間的差別。再繼續看下面代碼 function Test() { this.name = "test"; return "test"; } var test1 = new Test(); //Object 對象,它有一個name 屬性,而且返回一個字符串test var test2 = Test(); //test 。它單純是一個字符串
/*通過上面的代碼,能夠得出一個推測:假設函數返回值為常規意義上的數值類型(Number、String、Boolean)時,new函數將會返回一個該函數的實例對象,而假設函數返回一個引用類型(Object、Array、Function)時,則new函數與直接調用函數產生的結果同樣*/
</script>

js new一個函數和直接調用函數的差別