定义具有方法和属性的 javascript 对象的最佳方法是什么?(如果可以以本机方式实现)
我开始大量使用 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
}
}
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));
它使用
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 中很正常,尤其是在定义回调时。