标题 | JavaScript中setter和getter方法介绍 |
内容 | javascript中的setter、getter是平时接触比较少的方法,其本身也并不是标准方法,只在非ie浏览器里支持(ie内核也许有其他方法可以做到呢?暂时不知其解),但是加以利用可以做许多事情,比如: 1、对数据的访问限制: a.value是对value变量的getter方法调用,如果在getter方法实现中抛出异常,可以阻止对value变量的访问 2、对dom变量进行监听: window.name是一个跨域非常好用的dom属性(大名鼎鼎,详见百度),如果覆盖window.name的setter实现则可以实现跨页面的内存异步通信 3、自己发挥想象力,能做的事情好多滴 以下皆转: 首先,我们先来快速了解什么是Getters和Setters,以及它们为什么很有用。然后,我们来看看现在都有哪些平台支持Gettets和Setters。 Getters和Setters Getters和Setters使你可以快速获取或设置一个对象的数据。一般来说,一个对象拥有两个方法,分别用于获取和设置某个值,比如: { getValue: function(){ return this._value; }, setValue: function(val){ this._value = val; } } 用这种方式写JavaScript的一个明显的好处是:你可以用它来隐藏那些不想让外界直接访问的属性。最终的代码看起来就像下面这样(用闭包保存新创建的Filed对象的value): function Field(val){ var value = val; this.getValue = function(){ return value; }; this.setValue = function(val){ value = val; }; } 于是我们可以这样使用: var field = new Field("test"); field.value // => undefined field.setValue("test2") field.getValue() // => "test2" 我们来模拟上例中的 “隐藏的value属性”,我们的代码就像这样: function Field(val){ var value = val; this.__defineGetter__("value", function(){ return value; }); this.__defineSetter__("value", function(val){ value = val; }); } 但是呢,你不喜欢这样写,而倾向在对象的prototype中定义getters和setters(私有变量写在哪并不重要),我们可以用另一种语法。 function Field(val){ this.value = val; } Field.prototype = { get value(){ return this._value; }, set value(val){ this._value = val; } }; 这种语法看起来很不可思议,但是使用过一段时间之后,接受它也很容易。 接下来是另一个例子,它允许外界获取一个username数组,但是却不能获取原始的,隐藏的user对象。 function Site(users){ this.__defineGetter__("users", function(){ // JS 1.6 Array map() return users.map(function(user){ return user.name; }); }; } 记住以下几点: 一个对象内,每个变量只能有一个getter或setter。(因此value可以有一个getter和一个setter,但是value绝没有两个getters) 删除getter或setter的唯一方法是:delete object[name]。delete可以删除一些常见的属性,getters和setters。 如果使用__defineGetter__或__defineSetter__,它会重写之前定义的相同名称的getter或setter,甚至是属性(property)。 平台 支持的浏览器有: Firefox Safari 3+ Opera 9.5 以上所述是小编给大家介绍的JavaScript中setter和getter方法介绍的全部叙述,希望对大家有所帮助 |
随便看 |
|
在线学习网考试资料包含高考、自考、专升本考试、人事考试、公务员考试、大学生村官考试、特岗教师招聘考试、事业单位招聘考试、企业人才招聘、银行招聘、教师招聘、农村信用社招聘、各类资格证书考试等各类考试资料。