__defineGetter__,__defineSetter__和Object.defineProperty

Posted 小猪ab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了__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

当然这是最简单的用法

以上是关于__defineGetter__,__defineSetter__和Object.defineProperty的主要内容,如果未能解决你的问题,请参考以下文章

event.preventDefault() 火狐下没有作用。

关于#if(defined(__WIN32__)的问题

在不使用 #define 的情况下捕获 __LINE__ 和 __FILE__

JavaScript中的类

跨平台为宏 __FUNCTION__ 和 __func__ 定义 #define

ZOJ 3936: Apples and Ideas