1

次のコードに基づいて JavaScript クラスを作成するように依頼されました。

 var var1=new MyClass();

 MyClass.setDefaultYear("2013"); //sets default year for all instances of MyClass to 2013

 var1.getYear(); //returns 2013

 var1.year=2001; //sets year to 2001

 var1.getYear(); //returns 2001

 var var2=new MyClass();

 var2.getYear(); //returns 2013

気になるのは:MyClass.setDefaultYear("2013")

"MyClass"他のすべてを機能させることができましたが、インスタンス名の代わりに使用する方法がわかりません。

自己学習プロセスで見逃したものは何ですか?

ありがとうございました

4

6 に答える 6

1

MyClass が定義されていません。

function MyClass(){
    this.setDefaultYear = function(year){
        MyClass.prototype.year = year;
    };
    this.getYear = function (){
        return this.year;
    }
}
var var1=new MyClass();
var1.setDefaultYear("2013"); //sets default year for all instances of MyClass to 2013
console.log(var1.getYear()); //returns 2013
var1.year=2001; //sets year to 2001
console.log(var1.getYear()); //returns 2001
var var2=new MyClass();
console.log(var2.getYear()); //returns 2013
于 2013-06-07T09:45:43.357 に答える
0

単純。クラス関数と考えsetDefaultYearて、デフォルト値を関数のフォールバックとして提供しますgetYear

MyClass.setDefaultYear = function(year) {
  MyClass.defaultYear = year;
}

MyClass.setDefaultYear("2013");

function MyClass() {
  ....
  ....
  this.year;
  this.getYear = function() {
   return this.year || MyClass.defaultYear; //returns MyClass.defaultYear if this.year is not set.
  };
  this.setYear = function(year) {
   this.year = year;
  };
}

var myClass = new MyClass();
myClass.getYear();//"2013"
myClass.setYear("2015");
myClass.getYear();//"2015"
于 2013-06-07T09:25:47.173 に答える
0

あなたのクラスは という名前の関数だと思いますMyClass。JavaScript では関数はオブジェクトです。したがって、キーワードを介して関数にプロパティを割り当てることができますthis。さらに、すべてのカスタム関数はプロトタイプ属性によって拡張されます。この属性は、仮想オブジェクトへの参照です。キーワードを使用して MyClass の新しいインスタンスを作成する場合はnew、仮想オブジェクトへの参照を使用します。属性を介してクラス/仮想オブジェクトを拡張できます.prototype。例:

function MyClass(pname)
{
    this.name = pname;
}

MyClass.prototype.getName = function()
{
    alert(this.name);
}

Obj = new MyClass('Simon');
Obj.getName(); // alerts Simon
于 2013-06-07T09:46:57.047 に答える
0

これはまさにあなたが求めていることを行います。

       /* THIS IS THE "CLASS" */
var MyClass = (function () {

    // MyClass is a function that constructs an instance
    function MyClass() { }

    //Creates a new function on the prototype to get the year for the instance. functions which are part of the prototype are instance functions that are shared across all instances of the object.
    MyClass.prototype.getYear = function () {
        return this.year;
    }

    MyClass.setDefaultYear = function (year) {
        /* The prototype is shared across all instances of MyClass, 
        so all instances receive the same value, unless specified directly on the instance.*/
        MyClass.prototype.year = parseInt(year);
    }


    // return the full MyClass implementation.
    return MyClass;
})(); // Your "class" ends here!

// Tests...

var var1 = new MyClass(); // Create a new instance of MyClass

MyClass.setDefaultYear(2013); // Set The default year for ALL instances of MyClass.

alert(var1.getYear()); // This shows "2013" because that is what has been set on the prototype.

var1.year = 2001; //Year is visible, and you can set it's value for each unique instance.

alert(var1.getYear()); // This displays "2001" because that is the value now belonging to instance "var1"

var var2 = new MyClass(); // Create a new instance of MyClass

alert(var2.getYear()); // Since the prototypes value is still 2013, this displays "2013"
于 2013-06-07T10:15:32.453 に答える