存取器

/*
 * 一旦定义了取值函数get(或存值函数set),就不能将writable设为true,或者同时定义value属性,否则会报错
 * 存取器往往用于,某个属性的值需要依赖对象内部数据的场合
 */

function Loading() {
    Object.defineProperty(this, ‘text‘, {
        get: function() {
            return document.querySelector(‘#text‘).textContent
        },
        set: function(v) {
            if (typeof v !== ‘string‘) {
                throw new Error(‘Non expected value‘)
            } else {
                document.querySelector(‘#text‘).textContent = v
            }
        }
    })
}

var loading = new Loading()
console.log(loading.text)
loading.text = ‘aaaa‘
console.log(loading.text)

var o = {
    $n: 5,
    get next() {
        return this.$n++
    },
    set next(n) {
        if (n >= this.$n) this.$n = n
            else throw ‘新的值必须大于当前值‘
    }
}

console.log(o.next) // 5
o.next = 10
console.log(o.next) // 10
时间: 2024-11-11 14:28:29

存取器的相关文章

ECMAScript5中的对象存取器属性:getter和setter

显然这是一个无关IE(高级IE除外)的话题,尽管如此,有兴趣的同学还是一起来认识一下ECMAScript5标准中getter和setter的实现.在一个对象中,操作其中的属性或方法,通常运用最多的就是读(引用)和写了,譬如说o.get,这就是一个读的操作,而o.set = 1则是一个写的操作.事实上在除ie外最新主流浏览器的实现中,任何一个对象的键值都可以被getter和setter方法所取代,这被称之为“存取器属性”. 毫无疑问,getter负责查询值,它不带任何参数,setter则负责设置键

php学习九:存取器&魔术方法

当声明属性的时候用到了private,那么的话只能本类中才能访问此属性,其他地方无法使用,这个时候需要给外界提供一些方法来使外界访问 方法一:存取器: 可以提供一个public的方法来使外界对类里面的属性进行访问和赋值 class Student { private $name; private $age; public function show(){ echo "{$this->name}今年{$this->age}岁了"; } /*****存取器:get,set***

【OC学习-8】存取器方法?getter和setter?事实上就是赋值和返回值的两种函数

我们在声明类的时候,有实例变量+方法(函数),这些实例变量假设默认的话都是protected类型,一般无法直接訪问.更别提赋值和调用了,所以就产生了两种函数,getter函数就是可以返回实例变量的值,setter函数就是可以设置实例变量的值.(当然假设你把实例变量改成public的话可以直接调用,但不安全) 存取器方法(函数)就是:存--赋值setter函数.取--返回值getter函数. (1)先在类的.h文件中面声明这个函数(方法).一般都有默认的格式(例如以下):返回值函数的函数名字一般都

【笔记】JavaScript编码规范- 存取器

对于属性,访问器函数不是必须的. 如果定义了存取器函数,应参照getVal() 和 setVal('Hi')格式. // bad dragon.age(); // good dragon.getAge(); // bad dragon.age(25); // good dragon.setAge(25); 如果属性时boolean,格式应为isVal() or hasVal(). // bad if (!dragon.age()) { return false; } // good if (!d

【OC学习-9】利用@property属性和@synthesize简化实例变量的存取器方法

如果我们在一个类中定义了3个实例变量,那么如果要写存取器方法的话,需要写6个(每个实例变量各一个setter和getter).现在的简化方法是: (1)在类的.h文件里,只要写了属性,那么这个实例变量就可以被操作,如果想要不被操作保证安全,那么就不要声明属性,只要写在实例变量里即可. #import <Foundation/Foundation.h> //我们一般会省略实例变量的写法,因为写了属性后,一般会自动生成同名的实例变量 @interface ASStudent : NSObject{

【OC学习-8】存取器方法?getter和setter?其实就是赋值和返回值的两种函数

我们在声明类的时候,有实例变量+方法(函数),这些实例变量如果默认的话都是protected类型,一般无法直接访问,更别提赋值和调用了,所以就产生了两种函数,getter函数就是能够返回实例变量的值,setter函数就是能够设置实例变量的值.(当然如果你把实例变量改成public的话可以直接调用,但不安全) 存取器方法(函数)就是:存--赋值setter函数,取--返回值getter函数. (1)先在类的.h文件里面声明这个函数(方法),一般都有默认的格式(如下):返回值函数的函数名字一般都和变

存取器描述

当使用存取器描述属性的特性的时候,允许设置以下特性属性: 1 var obj = {}; 2 Object.defineProperty(obj,"newKey",{ 3 get:function (){} | undefined, 4 set:function (value){} | undefined 5 configurable: true | false 6 enumerable: true | false 7 }); 注意:当使用了getter或setter方法,不允许使用w

JavaScript 之存取器属性

首先介绍一下此篇随笔的主角: Object.getOwnPropertyDescriptor 和 Object.getOwnPropertyDescriptors 通过这两个api,可以访问除 null 以外任何对象的属性. 来看一个事实: var obj = { x : 1 } console.log( obj.x )  //  1 通过小圆点访问的真的是 x 的值吗?你可以将小圆点看成一个运算符,访问到的永远是存取器属性内部的value值 或者 get 方法的返回值. 前面我在一篇随笔中说到

Objuct-c 对象的初始化 存起器 属性 self和super 内存管理

对象初始化: -(id)init:万能类型,能返回各种对象,可能会导致类型错误. -(instancetype)init:当前类的类型(推荐大家选) if的判断语句中self是等于[super init]而不是判断,初始化失败的话就返回空 ,这时返回0给self自己,自己就变成空对象. 指定初始化方法 一般是参数最多的一种初始化方法: 其他初始化都直接间接调用指定初始化,出现错误以后可以直接从指定初始化中找出错误. 一个类需要一个指定初始化方法. 存取器方法: get的方法和实例变量同名. se