__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

当然这是最简单的用法

时间: 2024-07-28 19:01:05

__defineGetter__,__defineSetter__和Object.defineProperty的相关文章

关于Object.defineProperty 的基础知识

Object.defineProperty 这个方法大家耳熟能详,可以对 对象的属性进行添加或修改的操作.即可以进行  数据劫持 .vue就是通过这个方法来劫持数据的. 平时我们创建对象的时候,一般通过对象字面量的方式创建: var student = { name:"小明", age:10 } 对象的属性在创建的时候,都带有一些特征值(特性),JS通过这些特征值来定义它们的行为. ECMA-262 第 5 版在定义只有内部才用的特性(attribute)时,描述了属性(propert

Object.defineProperty 中的 writable 和 configurable 和 enumerable 的理解

在现在比较新的框架中, 比如 reactjs, vuejs中用得很多的一个属性便是 Object.defineOProperty 此属性的文档在网上一搜, 其中的几个属性, 包括 存取描述符(有set和get的) 和 数据描述符(直接有 value 的就是数据描述符) 有 set get 有 value writable enumerable configurable 虽然有 set 和 get, 但是定义的时候还是要用到 enumerable 和 configurable set 和 get

Object.defineProperty小解

最早认识这个函数,源于对vue双向绑定的探索,vue通过这个函数实现属性挟持并结合发布者-订阅者模式实现双向绑定 先看一个实例: var o= {name: 'a'} Object.defineProperty(o, 'value', { value: 3, writable: true, enumerable: true, cofigurable: true }) console.log(o.value) //3 三个参数,分别是目标对象.属性名称.参数对象 value:属性值 writabl

解析神奇的 Object.defineProperty

这个方法了不起啊..vue.js是通过它实现双向绑定的..而且Object.observe也被草案发起人撤回了..所以defineProperty更有必要了解一下了. 几行代码看他怎么用 var a= {} Object.defineProperty(a,"b",{ value:123 }) console.log(a.b);//123 很简单,它接受三个参数,而且都是必填的.. 传入参数 第一个参数:目标对象 第二个参数:需要定义的属性或方法的名字. 第三个参数:目标属性所拥有的特性

MVVM双向绑定实现之Object.defineProperty

随着web应用的发展,直接操作dom的应用已渐行渐远,取而代之的是时下越来越流行的MVVM框架,dom操作几乎绝迹,这里面自然是框架底层封装的结果.MVVM框架的双向数据绑定使开发效率大大提高:然后在实现这些双向数据绑定时,使用ES7原生的Object.observe方法则是完美解决方案,但是遗憾的是该方法目前还是ES7的草案阶段,各浏览器还不支持,目前chrome 36+支持该方法. 既然Object.observe不被支持,但是其替代方案是ECMAScript 262v5带来的新东西Obje

Javascript Object.defineProperty()

转载声明: 本文标题:Javascript Object.defineProperty() 本文链接:http://www.zuojj.com/archives/994.html,转载请注明转自Benjamin-专注前端开发和用户体验 Javascript作为一种语言,有个美誉,开发者可以重新定义任何事情.虽然这在过去的一些javascript可以,但是ECMAScript5中已经开始得到改变,例如,我们可以使用Object.defineProperty创建一个不能被修改的对象的属性.本文中我们

Object.defineproperty实现数据和视图的联动

Object.defineproperty语法 在一个对象上定义新的属性 var o = {}; // 创建一个新对象 // Example of an object property added with defineProperty with a data property descriptor Object.defineProperty(o, "a", {value : 37, writable : true, enumerable : true, configurable :

Object.defineProperty(obj,prop,descriptor)简单使用

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>javascript test</title> <script type="text/javascript" src="js/jquery.min.js"></script> <style> body { padding:

Object.defineProperty与修改某个数组实现监听效果

1.Object.defineProperty Object.defineProperty具体资料:传送门 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> /*Object.defineP