我想知道爲什麼我需要下面的PhoneNumberFormatter.prototype.slice
方法。JavaScript構造函數函數方法
爲什麼我不能在我的其他方法裏面使用slice(3,6).join('')
而不需要添加PhoneNumberFormatter.prototype.slice
方法?當解釋器在PhoneNumberFormatter對象上找不到方法時,是不是隻會查找原型鏈以找到slice
並加入Array
原型?
function PhoneNumberFormatter(numbers) {
this.numbers = numbers;
}
PhoneNumberFormatter.prototype.render = function() {
var string = '';
string += this.parenthesize(this.getAreaCode());
string += ' ';
string += this.getExchangeCode();
string += '-';
string += this.getLineNumber();
return string;
};
PhoneNumberFormatter.prototype.getAreaCode = function() {
return this.slice(0, 3);
};
PhoneNumberFormatter.prototype.getExchangeCode = function() {
return this.slice(3, 6);
};
PhoneNumberFormatter.prototype.getLineNumber = function() {
return this.slice(6)
};
PhoneNumberFormatter.prototype.parenthesize = function(string) {
return '(' + string + ')';
};
// why do I need the following method?
PhoneNumberFormatter.prototype.slice = function(start, end) {
return this.numbers.slice(start, end).join('');
};
var phoneNumberOne = new PhoneNumberFormatter([6, 5, 0, 8, 3, 5, 9, 1, 7, 2]);
phoneNumberOne.render()
你在這裏做的唯一事情就是調用PhoneNumberFormatter的slice方法並加入結果,它不像你需要的那樣,但它確實使你的代碼看起來更清潔和簡單,也就是說,你只需要做加入一次,並在一個地方引用數字屬性,從一個不要複製自己的角度來看,這是一個很好的方式來做到這一點,我會說 – Icepickle
你是什麼樣的原型鏈想到會導致'Array.prototype' ? – melpomene
@melpomene他指的是'PhoneNumberFormatter.prototype.slice'方法;) – Icepickle