[英]JavaScript getter and setter
这是一个非常基本的问题,我确定它是重复的,所以我事先表示歉意,但这就是我写一个这样使用的对象的方式:
myApplication.myFirstMethod(x);
x = myApplication.myFirstMethod();
这是代码:
myApplication = {};
(function() {
myApplication.myFirstMethod = function() {
var local = {};
if (arguments.length) {
local.result = arguments[0];
}
return local.result;
}
myApplication.mySecondMethod = function() {
var local = {};
if (arguments.length) {
local.result = arguments[0];
}
return local.result;
}
})();
更加面向对象的方法是使用实例化和原型。
设定
var Application = function(){
this.local = {};
};
Application.prototype.Value = function(){
if (arguments.length) {
this.local.result = arguments[0];
}else{
return this.local.result;
}
};
用过的
var app = new Application();
app.Value(6);
alert(app.Value());//6
从jQuery的角度来看,他们将首先进行筛选以查看是否有参数,此代码直接来自其源代码中的val
函数:
val: function( value ) {
if ( !arguments.length ) {
var elem = this[0];
...
然后,它继续使用元素的本机API和其他一些指标来获取元素的值(通常,唯一会从val
返回值的元素类型将是诸如input
, select
等的元素。 -基本上是表单元素)。
在if
块的末尾,它尝试根据是否找到附加到该元素(或元素集)的值来返回各种结果。 这样可以保证在遇到“获取”时,“设置”子句不会执行。 如果情况是正在使用“集合”,则它会通过一组稍微复杂的代码来为元素正确设置一个值。
该代码显示val: function()
的原因是因为它是对象的一部分,该对象用于使用jQuery的extend
功能来“扩展” jQuery原型。
创建这样的对象的模式很多,每个人都有自己的收藏夹。 Addy Osmani在总结Javascript设计模式“书”中的最流行模式方面做得非常出色。 具体来说,本节:
http://addyosmani.com/resources/essentialjsdesignpatterns/book/#designpatternsjavascript
我每半年重读一次,以确保将所有模式保留在颤动中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.