If you are not paranoid, you can just use nonwritable properties. That forces 
you to use `Object.defineProperty` to change the value, so you are protected 
against accidental assignments.

    function Obj() {
        Object.defineProperty(this, 'x', { value: 2, writable: false, 
enumerable: true, configurable: true })
        this.setX = function (val) {
            Object.defineProperty(this, 'x', { value: val })
        }
    }

    o = new Obj
    o.x = 17 // assignment will fail; moreover, in strict mode, an error is 
thrown
    o.x // 2
    o.setX(18)
    o.x // 18

It doesn't prevent the user from hanging themself with 
`Object.defineProperty(o, 'x', { value: 17 })`; but at least, it won't be by 
chance!

—Claude


Le 13 déc. 2013 à 14:34, raul mihaila <[email protected]> a écrit :

> Hello, was there any proposal for object properties that can be read from 
> anywhere but are writable only from the execution context where the name 
> associated with the property was defined? Something like:
> 
> function Obj() {
>     ro x; // read only name x
>     this.x = 2;
>     this.setX = function (val) {
>         this.x = val;
>     };    
> }
> 
> var o = new Obj;
> 
> o.x; // 2
> o.x = 43; // throws some error
> o.x; // 2
> o.setX(100);
> o.x; // 100
> 
> The advantages would be that you are sure that there are no side effects when 
> the property is accessed and also I'm guessing you have no function call 
> overhead.
> _______________________________________________
> es-discuss mailing list
> [email protected]
> https://mail.mozilla.org/listinfo/es-discuss

_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to