首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

双向数据绑定中重要属性-Object.defineProperty()详解

数据描述符和存取描述符均具有以下可选键值 configurable:当且仅当该属性 configurable 为 true 时,该属性描述符才能够被改变,同时该属性也能从对应对象上被删除。...当访问该属性时,该方法会被执行,方法执行时没有参数传入,但是会传入this对象(由于继承关系,这里this并不一定是定义该属性对象)。默认为 undefined。...set:一个给属性提供 setter 方法,如果没有 setter 则为 undefined。当属性值修改时,触发执行该方法。该方法将接受唯一参数,即该属性新参数值。默认为 undefined。...如果一个描述符同时有(value或writable)和(get或set)关键字,将会产生一个异常。...: false }) // throws a TypeError Object.defineProperty(o, 'a', {configurable: true}) // throws a TypeError

52610
您找到你想要的搜索结果了吗?
是的
没有找到

【前端】:对象、原型、继承

图1-7 writeable 出现在原型上,会怎么样 configurableconfigurable特性表示对象属性是否可以被删除,以及除value和writable特性外其他特性是否可以被修改...会创建一个“密封”对象,这个方法实际上会在一个现有对象上调用 Object.preventExtensions(...) 并把所有现有属性标记为 configurable: false。...obj.lumpy = 'woof'; delete obj.prop; // 作为参数传递对象与返回对象都被冻结 // 所以不必保存返回对象(因为两个对象全等) var o = Object.freeze...函数本身并不是构造函数,然而,当你在普通函数调用前面加上 new 关键字之后,就会把这个函数调用变成一个“构造函数调用”。实际上,new 会劫持所有普通函数并用构造对象形式来调用它。...如果你创建了一个新对象并替换了函数默认 .prototype 对象引用,那么新对象并不会自动获得 .constructor 属性。 ? .constructor 并不是一个不可变属性。

1K50

医疗数字阅片-医学影像-Module: Panel-自定义面板-中-es6-Object.defineProperty()定义属性

它们共享以下可选键值(默认值是指在使用 Object.defineProperty() 定义属性时默认值): configurable当且仅当该属性 configurable 键值为 true ...执行时不传入任何参数,但是会传入 this 对象(由于继承关系,这里this并不一定是定义该属性对象)。该函数返回值会被用作属性值。 默认为 undefined。...set属性 setter 函数,如果没有 setter,则为 undefined。当属性值被修改时,会调用此函数。该方法接受一个参数(也就是被赋予新值),会传入赋值时 this 对象。...当试图改变不可配置属性(除了 value 和 writable 属性之外)值时,会抛出TypeError,除非当前值和新值相同。...(o, 'a', { configurable: true }); // throws a TypeError Object.defineProperty(o, 'a', { enumerable

63440

了解JavaScript对象特殊属性

,接受三个参数参数1 为要修改对象,参数2 为修改对象,参数3 可以指定多个特殊值值 如果是对已有属性操作,则改变相应特殊值就行 如果没有该属性,则认为是通过该方法添加新属性,此时应该显式定义各项值.../ at :6:8 Object.defineProperty(great,'name',{ enumerable: false }) //报错 //Uncaught TypeError...Uncaught TypeError: Cannot redefine property: 属性名 -> 这是通常报错信息,表示不能重新定义特殊属性 获取对象属性特殊属性值 Object.getOwnPropertyDescriptor...() 接受两个参数参数1位对象,参数2为属性值。...: true, get: function() { return this.name; } }) //报错 //Uncaught TypeError: Invalid property

68510

Object.definePropety

configurable 当且仅当该属性configurable键值为true时,该属性描述符才能够被改变,同时该属性也能从对应对象上被删除,默认为false,默认值是指在使用Object.defineProperty...false时不可以改变描述符 // Uncaught TypeError: Cannot redefine property: key }); delete obj.key; // configurable...为false时不可以删除属性 // Uncaught TypeError: Cannot delete property 'key' of # console.log(obj.key);...当访问该属性时,会调用此函数,执行时不传入任何参数,但是会传入this对象,由于继承关系,这里this并不一定是定义该属性对象。该函数返回值会被用作属性值,默认为undefined。...当属性值被修改时,会调用此函数,该方法接收一个参数,且传入赋值时this对象,从而进行赋值操作,默认为undefined。

50750

JS 中 Reflect 和 Proxy

construct(target, argumentsList[, newTarget]) 与new操作符一样,target构造函数,第二参数是构造函数参数类数组,第三个是new.target值。...// 2 Proxy只有一个静态方法revocable(target, handler)可以用来创建一个可撤销代理对象。两个参数和构造函数相同。...一旦某个代理对象被撤销,它将变几乎完全不可用,在它身上执行任何可代理操作都会抛出 TypeError 异常(注意,可代理操作一共有 14 种,执行这 14 种操作以外操作不会抛出异常)。...另外,如果目标对象某个属性不可写(writable)或不可配置(configurable),则defineProperty方法不得改变这两个设置。...主要原因就是在 Proxy 代理情况下,目标对象内部this关键字会指向 Proxy 代理。

79420

JS中属性描述符

ES5中属性描述符是由Object类一个静态方法defineProperty来设置,该方法接收三个参数,分别是:属性操作对象、属性名和一个属性描述符对象。...属性描述符是由第三个参数来决定属性可以做哪些操作,这个对象可以设置以下值: 描述符值 描述 默认值 value 值 undefined writable 是否可写 true configurable...writable writable表示是否可写,如果其值设置为false,那么修改时会静默失败,严格模式下,会报错TypeError。...configurable configurable表示是否可配置,如果其值设置为false,那么将属性描述符重新设置时候会报错TypeError(无论是否是在严格模式下);同时delete该属性时候会静默失败...,严格模式会报错TypeError

2.3K30

JavaScript数据属性和访问器属性

要修改默认属性特性,必须使用 ES5 Object.defineProperty() 方法。这个方法接收三个参数:属性所在对象、属性名字和一个描述符对象。...也就是说,当 configurable 为 false 时候,value、writable、enumerable 和 configurable 都不能被修改了。...: true}) // TypeError: Cannot redefine property: p Object.defineProperties(o,'p',{configurable: true...}) // TypeError: Cannot redefine property: p 需要注意是,writable 只有在从 false 改为 true 会报错,从 true 改为 false 则是允许...返回是一个对象,如果是数据属性,这个返回对象属性有 configurable、enumerable、writable 以及 value;如果是访问器属性,则这个对象属性有 configurable

1.6K31

你根本不懂Javascript(EP4 this关键字和对象原型)

This关键字 几个对`this`关键字误解 认为`this`是指向函数自身 解决方案 认为`this`指向函数scope 方法调用及调用栈 调用规则 参考文献 本文于本博客首发...使用new关键字时发生了什么 新建立一个 Obj 将这个 Obj 与原型相连接(见后文详解) 新建立 Obj 设置为对应函数this 除非函数返回了一些莫名其妙东西,否则自动返回新建立元素 function...configurable: true, enumerable: true } ); myObject.a = 3; // TypeError Configurable 表示是否允许下一次使用defineProperty...configurable!...: true, enumerable: true } ); // TypeError 并且设置为 false 之后也无法使用delete删除对应属性 myObject.a;

22440

es3-es10整理

: true }, 'property2': { value: 'Hello', writable: false } }); Object.keys 在ES5里,如果此方法参数不是对象...在ES2015中,非对象参数将被强制转换为一个对象。...尝试删除一个密封对象属性或者将某个密封对象属性从数据属性转换成访问器属性,结果会静默失败或抛出TypeError(在严格模式 中最常见,但不唯一)。 不会影响从原型链上继承属性。...此外,冻结一个对象后该对象原型也不能被修改。freeze() 返回和传入参数相同对象。 被冻结对象自身所有属性都不可能以任何方式被修改。...obj.lumpy = 'woof'; delete obj.prop; // 作为参数传递对象与返回对象都被冻结 // 所以不必保存返回对象(因为两个对象全等) var o = Object.freeze

1.3K20

JavaScript权威指南 - 对象

对象直接量最后一个属性后逗号自动忽略。 第二种:通过关键字创建对象。 关键字new用来创建并初始化对象,后面跟一个构造函数。...所有通过对象直接量和构造函数创建对象都可以通过Object.prototype获得原型对象引用。没有原型对象为数不多,Object.prototype就是其中之一。...它接收两个参数:第一个是要创建对象原型;第二个是可选参数,用来描述对象属性。...要获得继承属性特性,需要遍历原型链。...通过对象直接量创建对象使用Object.prototype作为原型; 通过new关键字创建对象使用构造函数prototype作为原型; 通过Object.create()创建对象使用第一个参数作为原型

1.1K20

《你不知道js(上卷)》笔记2(this和对象原型)

关于this this关键字是javascript中最复杂机制之一。它是一个很特别的关键字,被自动定义在 所有函数作用域中。...参数传递其实就是一种隐式赋值,因此我们传入函数时也会被隐式赋值,所以结果一样。 显式绑定 可以使用函数call(..)和apply(..)方法实现显式绑定。...(TypeError)。...把configurable修改成 false 是单向操作,无法撤销!不管是不是处于严格模式,尝 试修改一个不可配置属性描述符都会出错(TypeError)。...函数本身并不是构造函数,然而,当你在普通函数调用前面加上new关键字之后,就会把这个函数调用变成一个“构造函数 调用”。实际上,new会劫持所有普通函数并用构造对象形式来调用它。

67710

强大JS方法Object.defineProperty详解及VUE.JS双向绑定原理

Object.defineProperty() 语法: Object.defineProperty(obj, prop, descriptor) 参数说明: obj:必需。目标对象 prop:必需。...需定义或修改属性名字 descriptor:必需。目标属性所拥有的特性 前两个参数不多说了,看代码就明白了,我们主要看第三个参数descriptor,看看它是个什么鬼!...Object.defineProperty(obj,"userName",{ value:"laozhang", writable:false }); obj.userName="laoliu"; //报错:TypeError...configurable是一个总开关,一旦你将它设置为false,就不能删除指定属性也不能再设置他(value,writable,configurable),设置为true,允许被删除,也允许被设置...:false }); Object.defineProperty(obj,"userName",{ value:"laoli" }); //报错:TypeError: Cannot redefine

1.1K20

Proxy

第一个参数是所要代理目标对象(上例是一个空对象),即如果没有Proxy介入,操作原来要访问就是这个对象;第二个参数是一个配置对象,对于每一个被代理操作,需要提供一个对应处理函数,该函数将拦截对应操作...下面是set方法第四个参数例子。...# apply() apply方法拦截函数调用、call和apply操作。 apply方法可以接受三个参数,分别是目标对象、目标对象上下文对象(this)和目标对象参数数组。...注意,目标对象自身不可配置(configurable属性,不能被deleteProperty方法删除,否则报错。...主要原因就是在 Proxy 代理情况下,目标对象内部this关键字会指向 Proxy 代理。

2.4K10

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券