は、以下のコードを実行:コンストラクタのプロトタイプに関数を追加したにもかかわらず、なぜ「関数が未定義」になるのですか?
console.clear();
var array = [ 'Apples', 'Oranges', , 'Pear', ];
array.first = function()
{
var len = this.length;
if (len === 0) throw new Error("Array empty");
return array[0];
}
Array.prototype.last = function()
{
var len = this.length;
if (len === 0) throw new Error("Empty array");
return array[len - 1];
}
console.log("========================")
for(prop in array)
console.log(prop + " = " + array[prop].toString());
console.log("========================")
try
{
var first = array.first();
console.log("first = " + first.toString());
}
catch(e)
{
console.log(e.message);
}
try
{
var last = array.last();
console.log("last = " + last.toString());
}
catch(e)
{
console.log(e.message);
}
console.log("========================")
var newArray = [ 'a', 'b', 'c' ];
for(prop in newArray)
console.log(prop + " = " + newArray[prop].toString());
console.log("========================")
try
{
var first = newArray.first();
console.log("first = " + first.toString());
}
catch(e)
{
console.log(e.message);
}
try
{
var last = newArray.last();
console.log("last = " + last.toString());
}
catch(e)
{
console.log(e.message);
}
は、次の出力を生成します。
Console was cleared.
========================
0 = Apples
1 = Oranges
3 = Pear
first = function()
{
var len = this.length;
if (len === 0) throw new Error("Array empty");
return array[0];
}
last = function()
{
var len = this.length;
if (len === 0) throw new Error("Empty array");
return array[len - 1];
}
========================
first = Apples
last = Pear
========================
0 = a
1 = b
2 = c
last = function()
{
var len = this.length;
if (len === 0) throw new Error("Empty array");
return array[len - 1];
}
========================
newArray.first is not a function
last is undefined
出力の最後の行を除いて結構ですすべてが、言っている、"last is undefined."
のはなぜですArray
クラス/コンストラクタのプロトタイプに追加したにもかかわらず、last
関数は未定義ですか?
Mozillaは、ネイティブプロトタイプを拡張することは悪い習慣だと言っています。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain – cs01
@ cs01ありがとうございました。それほど理解できない。 –