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

es3-es10整理

注意,一般来说,不可扩展对象属性可能仍然可被删除。尝试将新属性添加到不可扩展对象将静默失败或抛出TypeError(最常见情况是strict mode (en-US)中,但不排除其他情况)。...属性不可配置效果就是属性不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。但属性值仍然可以修改。...尝试删除一个密封对象属性或者将某个密封对象属性从数据属性转换成访问器属性,结果会静默失败或抛出TypeError(在严格模式 中最常见,但不唯一)。 不会影响从原型链上继承属性。...数据属性不可更改,访问器属性(有getter和setter)也同样(但由于是函数调用,给人错觉是还是可以修改这个属性)。...(); // 试图通过 Object.defineProperty 更改属性 // 下面两个语句都会抛出 TypeError.

1.4K20

JavaScript数据属性和访问器属性

在configurable为true情况下可多次调用Object.defineProperty( )修改同一属性。 在非严格情况下修改无法配置属性操作会被忽略,在严格模式下会抛出错误。...这是使用访问器属性常见方式,即设置一个属性值会导致其他属性发生变化。 不一定非要同时指定 getter 和 setter。只指定 getter 意味着属性是不能写,尝试写入属性会被忽略。...在严格模式下,尝试写入只指定了 getter 函数属性会抛出错误。类似地,只指定 setter 函数属性也不能读,否则在非严格模式下返回 undefined,严格模式下报错。...),变量配置性为 true。..., // writable: true, // enumerable: true, // configurable: true // } [[Configurable]] 特性还有个作用,一旦把属性定义为不可配置

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

正经人一辈子都用不到 JavaScript 方法总结 (二)

分析一下,这个需求其实就是需要创建一个固定属性对象,其属性不可增删,但属性值可更改。...属性不可配置效果就是属性不可删除,以及一个数据属性不能被重新定义成为访问器属性,或者反之。但属性值仍然可以修改。...尝试删除一个密封对象属性或者将某个密封对象属性从数据属性转换成访问器属性,结果会静默失败或抛出 TypeError(在严格模式 中最常见,但不唯一)。...(绝对存在) 设置configurable为false,禁止配置(绝对存在) 禁止更改访问器属性(getter和setter) 语法 Object.seal(obj) 参数 参数 obj 代表将要被密封对象...实际作用就是字面意思:冻结一个对象,使其属性属性值都不可更改。用来实现这个需求显然是不合适

23310

【JS】312- 复习 JavaScript 严格模式(Strict Mode)

严格模式是一项 ES5 功能,它使 JavaScript 以更好方式运行,因为启用严格模式会更改 JavaScript 语言语义。...在 JavaScript 中,可以使用下面代码定义对象属性不可写 JavaScript 代码: const car = {}Object.defineProperty(car, 'color', { value...: Cannot set property color of # which has only a getter })() 非严格模式允许扩展一个不可扩展对象: JavaScript 代码: const...: Cannot add property owner, object is not extensible })() 另外,非严格模式允许设置原始值属性,而不会失败,但也没有做任何事情: JavaScript...string 'test'})() 删除错误 在非严格模式,如果你尝试删除无法删除属性,JavaScript 只返回 false ,而在严格模式下,它会引发 TypeError: JavaScript

99230

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

这个方法允许修改默认额外选项(或配置)。默认情况下,使用 Object.defineProperty() 添加属性值是不可修改(immutable)。...存取描述符还具有以下可选键值: get属性 getter 函数,如果没有 getter,则为 undefined。当访问该属性时,会调用此函数。...data descriptors, get appears only in accessor descriptors 修改属性 如果属性已经存在,Object.defineProperty()将尝试根据描述符中值以及对象当前配置来修改这个属性...如果旧描述符将其configurable 属性设置为false,则该属性被认为是“不可配置”,并且没有属性可以被改变(除了单向改变 writable 为 false)。...当属性不可配置时,不能在数据和访问器属性类型之间切换。 当试图改变不可配置属性(除了 value 和 writable 属性之外)值时,会抛出TypeError,除非当前值和新值相同。

63740

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

存取描述符同时具有以下可选键值: get:一个给属性提供 getter 方法,如果没有 getter 则为 undefined。...()将尝试根据描述符中值以及对象当前配置来修改这个属性。...如果旧描述符将其 configurable 属性设置为false,则该属性被认为是“不可配置”,并且没有属性可以被改变(除了单向改变 writable 为 false)。...当属性不可配置时,不能在数据和访问器属性类型之间切换。 当试图改变不可配置属性(除了value和writable 属性之外)值时会抛出TypeError,除非当前值和新值相同。...然而,如果一个不可属性被继承,它仍然可以防止修改对象属性

53110

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

对象里目前存在属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值属性,该值可能是可写,也可能不是可写。存取描述符是由getter-setter函数对描述属性。...Object.preventExtensions()将对象标记为不再可扩展,因此它将永远不会具有超出它被标记为不可扩展属性。注意,一般来说,不可扩展对象属性可能仍然可被删除。 ? ?...所以,密封之后不仅不能添加新属性,也不能重新配置或者删除任何现有属性(虽然可以修改属性值)。...(); // 试图通过 Object.defineProperty 更改属性 // 下面两个语句都会抛出 TypeError....__proto__ 属性是一个访问器属性(一个getter函数和一个setter函数), 暴露了通过它访问对象内部[[Prototype]]。

1K50

共享可变状态中出现问题以及如何避免

attributes无关,它副本始终是可写和可配置 data 属性,例如: 1const original = Object.defineProperties({}, { 2prop: { 3...和 setter 都不会被如实地被复制:value 属性(用于数据属性),get 属性(用于 getter)和set 属性(用于 setter)是互斥。...而其他所有内容:不复制原型,仅部分复制特殊对象,忽略不可枚举属性,忽略大多数属性。 通常完全完全实现复制是不可:并非所有数据都是一棵树,有时你并不需要所有属性,等等。...方法: Object.preventExtensions(obj) Sealing 可以防止扩展,并使所有属性都无法配置(大约:您无法再更改属性工作方式)。...方法: Object.seal(obj) Freezing 使对象所有属性不可写后将其密封。也就是说,对象是不可扩展,所有属性都是只读,无法更改它。

1.5K40

《javascript高级程序设计》笔记:对象数据属性和访问器属性

默认为false 设置为true可以被删除或可以重新设置特性; 设置为false,不能被可以被删除或不可以重新设置特性,只能将writable从true置为false 一旦把属性定义为不可配置,就不能再把它便会可配置...true, enumerable: true, configurable: true }); console.log( obj.newKey ); //报错:Uncaught TypeError...Object.defineProperty(obj, "newKey", { value: "hello", writable: false }); // 更改newKey值...obj.key值上下文" console.log(obj.key); // undefined 不一定非要同时指定getter和setter。...只指定getter意味着属性是不能写,尝试写入属性会被忽略。在严格模式下,尝试写入只指定getter函数属性会抛出错误。

92520

《你不知道JavaScript》-- 对象(笔记)

(myObject, 'a', { value: 4, writable: true, configurable: false,//不可配置 enumerable: true...: Cannot redefine property: a 不管是不是处于严格模式,尝试修改一个不可配置属性描述符都会出错,即把configurable修改成false是单向操作,无法撤销。...这个方法是应用在对象上级别最高不可变性,它会禁止对对象本身以及任意直接属性修改(这个对象引用其他对象不受影响)。...如果是,在非严格模式下静默失败,在严格模式下抛出TypeError异常; 3)如果都不是,将该值设置为属性值。 如果对象中不存在这个属性,[[Put]]操作会更复杂。...1.3.9 Getter 和 Setter 对象默认 [[Put]] 和 [[Get]]操作分别可以控制属性设置和获取。

63520

JavaScript 权威指南第七版(GPT 重译)(五)

如果你尝试不可扩展对象添加新属性,就会发生这种情况(参见§14.2)。这些方法可能抛出 TypeError 其他原因与属性本身有关。可写属性控制对值属性更改尝试。...可配置属性控制对其他属性更改尝试(并指定属性是否可以被删除)。然而,规则并不完全直观。例如,如果属性是可配置,那么即使该属性不可,也可以更改属性值。...此外,即使属性不可配置,也可以将属性从可写更改不可写。以下是完整规则。...如果一个属性不可配置,你就无法改变它配置或可枚举属性。 如果一个访问器属性不可配置,你就无法更改getter 或 setter 方法,也无法将其更改为数据属性。...如果一个数据属性不可配置,你就无法将其更改为访问器属性。 如果一个数据属性不可配置,你就无法将其可写属性从false更改为true,但你可以将其从true更改为false。

17510

Object.definePropety

descriptor: 要定义或修改属性描述符。 属性描述符 对象里目前存在属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个具有值属性,该值可以是可写,也可以是不可。...存取描述符是由getter函数和setter函数所描述属性。一个描述符只能是数据描述符和存取描述符这两者其中之一,不能同时是两者。...属性描述符 configurable enumerable value writable get set 数据描述符 可以 可以 可以 可以 不可不可以 存取描述符 可以 可以 不可不可以 可以...// Uncaught TypeError: Cannot redefine property: key }); delete obj.key; // configurable为false时不可以删除属性...x of # which has only a getter set 属性setter函数,如果没有setter,则为undefined。

51050

面试官:请你介绍一下let const Object.freeze() ,set和get

vue 1.0.18+对Object.freeze()提供了支持,对于data或vuex里使用freeze冻结了对象,vue不会做getter和setter转换。...一个被冻结对象再也不能被修改;冻结了一个对象则不能向这个对象添加新属性,不能删除已有属性,不能修改该对象已有属性可枚举性、可配置性、可写性,以及不能修改已有属性值。...此外,冻结一个对象后该对象原型也不能被修改。 但它冻结是值,你仍然可以将变量引用替换掉 上面提到: 可枚举性、可配置性、可写性,以及不能修改已有属性值 ?...打印输出还是2 ,属性a值不能被改变 解析:writable:false 可以看作为属性不可改变,在严格模式("use strict";)下,引擎会抛出TypeError异常,这表示我们无法修改一个不可属性...configurable:只要属性是可配置,就可以使用 defineProperty(...)方法来修改属性描述符 注意⚠️ 在false情况下,如果修改,不管是不是严格模式,都会抛出TypeError

63430

Object.assign应用详解

很明显,继承属性不可枚举属性是不能拷贝,这一原理其实和JSON.stringify是相同,返回都是自身可枚举属性。...这里copy.bar值来自obj.bargetter函数返回值,那么该如何将访问器这类属性描述也拷贝过去呢?...该方法使用源对象[[Get]]和目标对象[[Set]],所以它会调用相关 getter 和 setter。因此,它分配属性,而不仅仅是复制或定义新属性。...如果合并源包含getter,这可能使其不适合将新属性合并到原型中。...String类型和 Symbol 类型属性都会被拷贝。 在出现错误情况下,例如,如果属性不可写,会引发TypeError,如果在引发错误之前添加了任何属性,则可以更改target对象。

70320

了解JavaScript对象特殊属性

var great = {} Object.defineProperty(great,'name',{ configurable: false,//设置 name 属性不可删除 value:...,设置值时触发 set set 指向了 setter方法,get 指向了 getter 方法 约定属性名前面加上 _ 作为私有变量,即外部不可以直接访问,需要通过 get 与 set 来访问,...)//26 getter 与 setter 不一定都要定义,只定义了 get 表示只能读,反之表示只能写 var Great = { _age: 20 } Object.defineProperty...false,writable 为 false;所以不许修改其值 Object.defineProperties(Great,{ name: { writable: false, //将此属性设为不可更改...set 方法都会报错,因为这个 configurable 就是规定每个属性在第一次设置之后是否可以再次修改 Uncaught TypeError: Cannot redefine property

69710

JavaScript对象

== "function") throw TypeError(); function(){}; f.prototype = p; return new f(); } 五、属性查询和设置 []...运算符,它使用字符串值(字符串值是动态,可以在运行时更改) .运算符,它使用标识符(标识符是静态,必须写死在程序中) var a = {x:1,y:2}; for(item in a){ a.item...a = {p:{x:1}}; delete a.p.x; delete a.p; 某些内置对象是不可配置,比如通过变量声明和函数声明创建全局对象属性: delete Object.prototype...由getter和setter定义属性称做“存取器属性”,其不同于“数据属性”,数据属性只有一个简单值。 2....Object.preventExtensions()[不可扩展] -> Object.seal()[不可扩展、自有属性不可配置] -> Object.freeze()[不可扩展、自有属性不可配置、数据属性设置为只读

75641

为什么不需要为Python对象添加 getter 和 setter

Getter 和 setter在java中被广泛使用。一个好java编程准则为:将所有属性设置为私有的,同时为属性getter和setter函数以供外部使用。...这样做好处是属性具体实现被隐藏,当未来需要修改时,只需要修改getter 和 setter即可,而不用修改代码中所有引用这个属性地方。...而不可能触发一个函数调用。...也就是说,python对象属性访问语法,天然就提供了getter和setter功能。 由于这个区别,我们没有必要在python中为每个对象属性getter和setter。...这个函数会检查输入是否为一个字符串,如不是则raise一个TypeError 在获取属性时(代码最后一行),用于get name函数被调用 在修改前后,使用Person类代码完全相同 总结 Python

1.2K20
领券