2

誰もが知っているはずですが、JavaScript には実際のClasses.

ただし、簡単な関数を使用して、セットアップのようなクラスを作成できます。

元:

var Person = function(name){//class like function
    this.name = name;//public 

    var display = function(text){//private
        return text;
    }

    this.getDressed = function(){//public
        return display(this.name + " needs to get dressed.");
    }

};
var person = new Person("John"),
    name = person.name,//returns "John"
    dressed = person.getDressed();//returns "John needs to get dressed",
    show = person.display("Hello");//throws error "Uncaught TypeError: Object [object Object] has no method 'display'" because there is no such function because it was private.

私の「クラス」には多くの機能があり、次のようなことを行う方法があるかどうかを知りたいです(機能しないことがわかっています):

this = {
  fun1: function () {},
  fun2: function () {},
  fun3: function () {}
}

私はこれがやっていると思うので:

this.fun1 = function(){};
this.fun2 = function(){};
this.fun3 = function(){};

かなり醜いです。すべての関数をオブジェクトに保持してからアタッチする方法はありますthisか?

4

4 に答える 4

2

プライベート メンバーにアクセスする必要がない場合は、次のようにすることができます。

function Person(){
    //stuff
}

Person.prototype = {
    fun1:function(){},
    fun2:function(){},
    //etc
};

thisプロトタイプ関数内からは引き続きアクセスできます。

または、次のようなこともできます。

function Person(name){
   var display = function(){//stuff};

   return {
       name: name,
       fun1: function(){},
       fun2: function(){}
   };
}
于 2013-01-17T23:43:29.050 に答える
1

あなたはこれを行うことができます:

var funcs = {
  fun1: function () {},
  fun2: function () {},
  fun3: function () {}
}

// Simple combiner
for (var f in funcs) {
  if (funcs.hasOwnProperty(f)) {
    this[f] = funcs[f];
  }
}
于 2013-01-17T23:18:54.420 に答える
0

あなたは本質的にアイデアを持っています。

Person の例では、適切なコンテキストをgetDressed関数に適用するだけです。

var that;
var Person = function(name){//class like function
    that = this; 
};
show = person.prototype.display.call(that, "Hello");
于 2013-01-17T23:16:42.110 に答える
0

このオブジェクト$.extend(Person.prototype, yourthisobject);に含まれるすべてのものを保持したい場合に使用できます。

于 2013-01-17T23:19:55.523 に答える