2017-11-14 30 views
2

私はJavascriptを学んでいます。私はプロトタイプとセッターを使用しようとすると、私は私がここで行方不明ですどのようなエラープロトタイプ付きJavascriptセッター機能

TypeError: cir1.radiusToCircle is not a function

var Circle = function(radius){ 
    this._radius = radius; 
} 

//prototype 

Circle.prototype ={ 
    set radiusToCircle(rad) { this._radius = rad; }, 
    get radiusFromCircle() { return this._radius;}, 

    get area() { return (Math.PI * (this._radius * this._radius));} 
}; 

var cir1 = new Circle(5); 

cir1.radiusToCircle(14); 

を取得していますか?

ありがとうございます。

+5

'cir1.radiusToCircle = 14;'。 – Tushar

+0

@トルーマン私の悪い、あなたはいくつかの説明と答えとしてそれを投稿できますか? – Sachith

+1

MDN [Setters](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/set)のサンプルを確認してください – Tushar

答えて

1

については

var Circle = function(radius){ 
    this._radius = radius; 
} 

Circle.prototype.getRadiusToCircle = function() { 
    return this._radius; 
} 

Circle.prototype.setRadiusToCircle = function(rad) { 
    this._radius = rad; 
} 

Circle.prototype.overloadRadiusToCircle = function(rad) { 
    if(rad != null) { 
     this._radius = rad; 
    } else { 
     return rad; 
    } 
} 

Circle.prototype.area = function() { 
    return (Math.PI * (this._radius * this._radius)); 
} 

あなたが直接プロパティを設定する必要がセッターを使用するには、関数の引数のようにそれを通過しません。 Setter MDN Docs

cir1.radiusToCircle = 14; 
1

あなたがやっていることはうまくいくかもしれませんが、使用しているset/getコマンドと関数のオーバーロードが良い考えであるかどうか分かりません。

ドキュメントから、メンバー変数を直接割り当てると、関連のないコードを実行するコールバックをバインドするように見えます。それがあなたがしようとしているものなら、プロトタイプ関数は必要ありません。例

var Circle = function(radius){ 
    this._radius = radius; 
    this._area = Math.PI * (radius * radius); 
} 

Circle.prototype = { 
    set _radius(radius) { 
     this._area = Math.PI * (radius * radius); 
    } 
} 

Circle.prototype.getArea = function() { 
    return _area; 
} 
+0

同じ名前のプロパティとセッターの両方を持つことはできません。あなたはそれをもっと複雑にしています。 OPのコードは100%正しいです – slebetman

+0

ドキュメントへのリンクを持っている他の答えを親切に参照してください –

+0

そのようなコンストラクタで 'set'を使うことはできません。それはオブジェクトリテラルでしか機能しないので、OPがやっているようなプロトタイプ宣言に追加する必要があります。 – slebetman

関連する問題