2

javascript でカプセル化を行う方法を教えてください。Car というクラスがあります。このクラスを B クラスで拡張したいと考えています。次に、Java スクリプトでメソッドをオーバーライドしてオーバーロードしたいと考えています。

ここに私のフィドルがあります http://jsfiddle.net/naveennsit/fJGrA/

   //Define the Car class
function Car() { }
Car.prototype.speed= 'Car Speed';
Car.prototype.setSpeed = function(speed) {
    this.speed = speed;
    alert("Car speed changed");
}


//Define the Ferrari class
function Ferrari() { }
Ferrari.prototype = new Car();


// correct the constructor pointer because it points to Car
Ferrari.prototype.constructor = Ferrari;

// replace the setSpeed method
Ferrari.prototype.setSpeed = function(speed) {
    this.speed = speed;
    alert("Ferrari speed changed");
}

var car = new Ferrari();
car.setSpeed();

この2行を説明してもらえますか

Ferrari.prototype = 新しい車(); この線は、フェラーリが車で延長されていることを示していますか?

 Ferrari.prototype.constructor = Ferrari;

この行の使用は何ですか?

4

2 に答える 2

0
Ferrari.prototype = new Car()

このメソッドは、フェラーリのプロトタイプに車のプロパティを追加します。Car() によって返されるものは何でも、既存のフェラーリのプロトタイプに追加されます。

Ferrari.prototype.constructor = Ferrari

Prototype には、この呼び出しFerrari.prototype = new Car()によってオーバーライドされるコンストラクター プロパティがあります。これは、手動で再度リセットしています。

プロトタイプおよびコンストラクター オブジェクトのプロパティ

私はあなたのフィドルを編集しました。http://jsfiddle.net/fJGrA/3/

JavaScript でクロージャーを使用すると、オブジェクトまたは関数内の要素を非表示にできます。

function foo(args){
//this is a private variable.
 var _name = ""

 return{
  getname:function(){
   return _name
   }
  }

 }

 bar = new foo()

 // name can only be accessed from inside the foo function.

関数内でvarキーワードを使用して変数を作成すると、その関数のスコープ内でのみアクセスできます。事実上、プライベートであること。

于 2013-09-16T08:56:15.133 に答える
0

JS は、設計上、オブジェクトのメンバーの可視性を管理する組み込みの方法を提供しません。しかし、カプセル化できるほど柔軟です。

私が見つけた効果的な記事はhttp://www.codeproject.com/Articles/108786/Encapsulation-in-JavaScriptです

于 2013-09-16T08:52:59.713 に答える