使用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)
What is the best way to define a javascript object with methods and properties? (if its possible in a native way)
我开始大量使用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中是正常的,尤其是在定义回调时。
相关文章:
- 如果我的内容/网站有名字,我可以用不同的方式设计我的网站吗
- 如果变量不是't已传递给函数.这是正确的方式吗
- 如果找不到路由,则以程序方式导航到服务器页面
- Javascript:我可以't找到正确的方式来表达布尔“;如果“;以得到我想要的结果
- 如果不使用HTML按钮,就无法通过编程方式触发SVG动画
- 使用方法和属性定义javascript对象的最佳方法是什么?(如果可能以本机方式)
- 3种方式说如果:否则,但哪一种
- 如果在以编程方式更改值之前更改了值,则手动更改值不会触发 onChange 事件
- 在 Telerik ASP.Net UI 客户端中,如果我以内联方式附加客户端事件,如何获取鼠标事件对象
- 如果以编程方式启动提交,则不会触发提交事件
- JQuery悬停菜单,如果浏览器禁用javascript,它的工作方式与常规菜单类似
- 频繁的轮询会使服务器过载吗?如果是的话;这是实现实时更新的最佳方式
- 检查按钮内部的类,如果它通过验证,以某种方式将其与同一按钮上的另一个类交换
- 如果存在,请更新或向对象数组添加新元素 - javascript + lodash 中的优雅方式
- 如果一个函数的大部分执行是以输入为条件的,那么下面哪一种是更好的实现方式
- 如果以异步方式加载绑定的资源,则函数中的$watch/$timeout包装会中断双向绑定
- 可以'如果使用document.write,则不要以编程方式插入js
- 如果用户点击浏览器取消按钮,隐藏正在加载的gif的最佳方式
- 从谷歌Chrome控制台调试的最佳方式.js文件,如果它被加载和执行后按钮被点击
- 如果以编程方式更改了模型,Ko不会更新绑定控件