使用方法和属性定义javascript对象的最佳方法是什么? (如果它可能以原生方式)

时间:2013-11-15 19:50:23

标签: javascript javascript-objects

我开始使用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 Literal对象,我不认为我可以将其称为具有属性和方法的对象。

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

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

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

3 个答案:

答案 0 :(得分:1)

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

function className() {

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

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

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



}

答案 1 :(得分:0)

是的,这是你可以做类似课程的方法之一。通常,你会看到它更精致,使用构造函数(不是构造函数,这是指定类的另一种方式):

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

    var privateMethod = function() {
    };

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

关于var self = this;的再现:这在javascript中是正常的,特别是在定义回调时。

答案 2 :(得分:0)

  

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

这肯定是具有属性和方法的对象; 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));

对于使用它创建的每个新对象,使用prototype Something,如果您想以这种方式考虑,则使用JavaScript的“类”实现。