2

众所周知,在 JavaScript 中没有实际的Classes.

但是,您可以使用一个简单的函数来创建一个类似于 setup 的类。

前任:

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);如果您想保留this对象中包含的所有内容,则可以使用。

于 2013-01-17T23:19:55.523 回答