javascript new
阿新 • • 發佈:2018-11-19
先上個例子程式碼:
function Animal(name, sex) { this.name = name; this.sex = sex; } Animal.color = "black"; Animal.prototype.heartBeat = true; Animal.prototype.say = function () { console.log("My name is: " + this.name); }; var cat = new Animal("cat", "female"); console.log("cat color: " + cat.color); console.log("cat heartBeat: " + cat.heartBeat); console.log("cat sex: " + cat.sex); console.log("animal color: " + Animal.color); console.log("animal heartBeat: " + Animal.heartBeat); console.log("animal sex: " + Animal.sex);
虛擬碼說明new都做了什麼:
var cat = new Animal("cat", "female") 等價於
var cat = {
var obj = {};
obj.__proto__ = Animal.prototype; //這時原型繼承的關鍵,新物件的__proto__指向了函式物件的原型物件
Animal.call(obj, "cat", "female"); //新物件具有了函式物件中的動態屬性和方法
return obj;
}