我开始使用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”始终设置为对象本身?
非常欢迎任何提示和建议:)
答案 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的“类”实现。