2016-08-19 1 views
0

オブジェクトに機能を追加することができなかったようです例外:Javascriptの寄生コンストラクタは、私はそれに余分な機能を付与含めて、オブジェクトを構築するために、寄生コンストラクタを使用して、インターネットからこの例を取得する理由

console.log(colors.toPipedString()); 
       ^
TypeError: colors.toPipedString is not a function 

しかし、私はオブジェクトに関数をアタッチしたと思います。それは機能がそこにないと言うのはなぜですか?

ありがとうございました。

+3

'values'は' SpecialArray'のローカル配列です、 'toPipedString'はその配列のメソッドです... – Teemu

答えて

3

内部変数にPipedString関数を添付します。これを試してみてください :

function SpecialArray() { 
    var values=new Array(); 
    values.push.apply(values, arguments); 
    this.toPipedString = function() { 
     return values.join("|"); 
    } 
} 

var colors = new SpecialArray("red", "blue", "green"); 
console.log(colors.toPipedString()); 
1

あなたがspecialArrayの関数としてtoPipedArrayを呼び出すしたい場合は、それは特別な配列の原型にする必要があります。

function SpecialArray(){ 
    this.values=new Array(); 
    this.values.push.apply(this.values, arguments); 

} 
SpecialArray.prototype.toPipedString = function(){ 
    return this.values.join("|"); 
} 
var colors=new SpecialArray("red", "blue", "green"); 
console.log(colors.toPipedString()); 

ノヤヤラのアプローチも同様です。関数/オブジェクト内でthis.Myfunctionを使用すると、myFunctionもプロトタイプに格納されます。

関連する問題