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

What is the best way to define a javascript object with methods and properties? (if its possible in a native way)

本文关键字:如果 方式 本机 是什么 定义 属性 javascript 对象 方法 最佳 使用方法      更新时间:2023-09-26

我开始大量使用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"始终设置为对象本身?

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

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

function className() {
    var self = this; 
    self.current = 0;
    //other member variables
    self.foo = function () {
    //do something
    }
    self.loader = function () {
    // do something else
    }

}

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

这肯定是一个具有属性和方法的对象;此处不涉及 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));

它使用Something prototype用于使用它创建的每个新对象,并且是JavaScript对"类"的实现,如果你想这样想的话。

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

var Class = function() {
    var privateField1 = 0;
    var privateField2 = 0;
    var privateMethod = function() {
    };
    return {
      publicProperty1: 0,
      publicProperty2: 0,
      publicMethod1: function() {
      }
    };
}

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

相关文章: