zoukankan      html  css  js  c++  java
  • __defineGetter__,__defineSetter__和Object.defineProperty

    // __defineGetter__ at the least works in more browsers
    // http://robertnyman.com/javascript/javascript-getters-setters.html
    // Object.defineProperty only works in Chrome
    
    //用法 String.prototype.__defineGetter__ = ('name',function(){ return nnn});
    String.prototype.__defineSetter__ = ('name',function(x){ return nnn});

    //这两个通常用来给内置对象定义seter和geter,不过已经要废弃了,取而代之的是Object.defineProperty

        Object.defineProperty(obj, 'key', { // descriptor }); 

       使得可以直接在某一对象上定义一个属性,这个属性可以是添加或修改现有的属性,前两个参数都很好理解,obj就是要修改的对象,key就是属性名,descriptor是一个对象,用来声明新添属性的一些特性,包括6个参数:

    • configurable:默认false,表示此属性是否可用delete删除

    • enumerable: 默认为false,表示此属性是否可被for...in、Object.keys遍历到

    • value:默认undefined,此属性的值,可以是任何JavaScript类型

    • writable:默认为false,此属性是否可被改写

    • get:默认undefined,指定一个函数,当属性被调用时,此函数也被调用,默认为返回属性值

    • set:默认undefined,指定一个函数,当属性被赋值时,此函数也被调用,仅接受一个参数,参数为属性被赋的值

        

     var a = {};
     Object.defineProperty = (a,'m',{
            value:'hello world'
        })
    
    console.log(a.m)  //hello world

    当然这是最简单的用法

  • 相关阅读:
    两数组相比筛选数据
    利用Cache防止同一帐号重复登录
    [转]post与get的区别
    巧妙运用SQL Server保护数据
    华为任正非:让一线呼唤炮火(续)
    ASP.NET到底该从哪开始学起?
    C# 4.0中泛型协变性和逆变性详解
    服装库存积压的解决路径
    Spring3 MVCx学习 skyCc
    Hibernate缓存(转述) skyCc
  • 原文地址:https://www.cnblogs.com/johnzhu/p/7132449.html
Copyright © 2011-2022 走看看