我設法創建了一個名爲「createHumanByGender」的類似工廠的函數,但是,返回的對象不允許我調用其原型方法「Human.prototype.getFullName( )」。 爲什麼會有這種情況發生?未通過工廠返回的JavaScript對象原型
代碼如下:
// get female instance of Jade
var jade = createHumanByGender.bind(this, 'Female', 'Jade', 'Taylor')();
console.log(jade.getFullName());
// ------------------------------------------------
// HUMAN
function Human (forename, surname) {
this.forename = forename;
this.surname = surname;
this.age = 0;
}
Human.prototype = {
getForename : function() {
return this.forename;
},
getSurname : function() {
return this.surname;
},
getFullName : function() {
return this.forename + ' ' + this.surname;
}
};
// MALE
function Male (forename, surname) {
Human.call(this, forename, surname);
this.gender = 'Male';
}
Male.prototype = Object.create(Human.prototype);
// FEMALE
function Female (forename, surname) {
Human.call(this, forename, surname);
this.gender = 'Female';
}
Female.prototype = Object.create(Human.prototype);
// GENDER
function createHumanByGender (gender, forename, surname) {
return new this[gender](forename, surname);
}
請顯示調用'createHumanByGender()'的代碼,然後嘗試在返回的對象上執行方法的代碼。 – jfriend00
你確定你調用它正確嗎?像這樣'var h = createHumanByGender('Male','Thomas','Mann'); h.getFullName();'。 – dfsq
你在哪裏運行這段代碼?按照你的方式使用'this'的一個問題是,在沙箱中你的'Human/Male/Female'函數定義可能存在於非全局範圍中,但是this'仍然是隱式的全局對象。嚴格模式也會毀了你的一天。什麼錯誤被拋出? – Oka