开发者问题收集

定义具有方法和属性的 javascript 对象的最佳方法是什么?(如果可以以本机方式实现)

2013-11-15
1191

我开始大量使用 javascript,我想知道在不实现任何库的情况下使用对象的最佳方法是什么,只使用本机 javascript 代码。

到目前为止,为了声明“具有属性和方法的对象”,我所做的是这样的:

var myObj = {
    prop1: 'foo',
    prop2: 'bar',

    returnProp1: function() {
        var self = myObj;
        alert(self.prop1);
    },

    returnProp1: function() {
        var self = myObj;
        alert(self.prop2);
    }
}

但据我所知,这将是一个 JSON 文字对象,我不认为我可以将其称为具有属性和方法的对象。

我必须做的另一件事是在每个函数中声明 var self = myObj; ,因为当我调用该对象的函数时,“this”会被覆盖,例如在 jquery 选择器的单击绑定中,“this”将成为 DOM 元素。

那么,这是使用 javascript 对象的正确方法吗?有没有办法让“this”始终设置为对象本身?

非常欢迎任何提示和建议:)

3个回答

我认为这是解决问题的方法。

function className() {

    var self = this; 
    self.current = 0;
    //other member variables

    self.foo = function () {
    //do something
    }

    self.loader = function () {
    // do something else
    }



}
jaywalker
2013-11-15

But as far as I know, this would be a JSON Literal object, I don't think that I could call it an object with properties an methods.

这肯定是一个具有属性和方法的对象;这里不涉及 JSON。(JSON 是一种序列化格式,旨在与 JavaScript 对象文字兼容,但这里不适用。)这也是创建对象的“正确”方法。

如果您想创建一个构造函数,它看起来像这样:

function Something() {
    // initialization here, if you need it
}

Something.prototype.foo = function(a) {
    return a * a;
};

var obj = new Something();
console.log(obj.foo(42));

它使用 Somethingprototype 为每个使用它创建的新对象,并且是 JavaScript 对“类”的实现,如果您想这样想的话。

rninty
2013-11-15

是的,这是创建类似类的东西的方法之一。通常,您会看到更精致的方法,使用构造函数(而不是构造函数,这是指定类的另一种方法):

var Class = function() {
    var privateField1 = 0;
    var privateField2 = 0;

    var privateMethod = function() {
    };

    return {
      publicProperty1: 0,
      publicProperty2: 0,
      publicMethod1: function() {
      }
    };
}

关于 var self = this; 的重复:这在 javascript 中很正常,尤其是在定义回调时。

Femaref
2013-11-15