[javascript] 預設的函式建構子(function constructors)與原生值

在 javascript 中,預設內建了一些基本的函式建構子(function constructors)

我們可以透過這些函式建構子建立相關物件,並且繼承此函式的原型(prototype)方法。

PS. 但他們型別會與原生值不同,因此還是建議不要使用,以免混淆原生值與物件。


var a=new Number(10);
console.log(typeof a);
console.log(Number.prototype);
// object
// Number 函式的原型(prototype)方法
var str=new String("QQ");
console.log(typeof str);
console.log(String.prototype);
// object
// String 函式的原型(prototype)方法
// 新增新的方法
String.prototype.hello=function(){ console.log("hello"); };
"test".hello();
// hello

上面這段程式碼可以看到,使用內建的 Number 及 String 函式建構子可以繼承原函式的原型(prototype)方法,也可以自行再新增原型方法。(注意,若新增的原型方法名稱與內建相同則會覆蓋掉)

最後,建議大家還是不要使用內建的函式建構子去建立原生值,讓我們看看為什麼

var a=10;
var b=new Number(10);
console.log(a==b);
console.log(a===b);
console.log(typeof a+" "+typeof b);
// true
// false
// number object

使用函式建構子與原生值的型態會不相同,並且很有可能造成一時無法分辨錯誤。

參考資料:
https://pjchender.blogspot.tw/2016/06/javascriptfunction-constructors.html

Leave a Reply

Your email address will not be published. Required fields are marked *