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

JavaScript之面向对象的概念,对象属性和对象属性的特性简介

一、大家都知道,面向对象语言有一个标志,那就是他们都有类的概念,通过类我们可以创建任意多个具有相同属性和方法的对象。...但ECMAScript(指定JavaScript标准的机构,也就是说JavaScript是实现其标准的扩展)并没有类的概念,因此他的对象和基于类的语言中的对象有所不同,ECMAScript把对象定义为:...ECMA-262定义这些特性是为了实现JavaScript引擎用的,因此在JavaScript中不能直接访问他们,为了表示特性是内部值,ECMA-262规范把它们放在了两对方括号中,例如[[Enumerable...输出:TypeError: can't redefine non-configurable property "name" 注意:当我们调用Object.defineProperty()方法,在指定了对象和对象的属性却没有指定描述符对象的的...对于直接在对象上定义的属性。这个特性的默认值为true。 [[Get]]:在读取属性时调用的函数,默认值为undefined。 [[Set]]:在写入属性时调用的函数。默认值为undefined。

2.3K60

【重学前端】003-JavaScript:正统的面向对象语言

2、JavaScript 的面向对象 思维导图 常见的”固有“观念: 面向对象要有类,有类的封装、继承、多态特性,类是静态的,不可在运行时添加新属性。...JavaScript:可以在运行时往里添加属性 + 对象的状态和行为都归结为属性。 关键点 任何语言运行时类的概念都是被弱化的!...2、两类属性 数据属性的 4 个特征 大多数情况下,我们只关心属性的值就可以!...getter:函数或 undefined,在取属性值时被调用; setter:函数或 undefined,在设置属性值时被调用; enumerable:决定 for in 能否枚举该属性; configurable...(o, "a"); console.log(res); // { value: 1, writable: true, enumerable: true, configurable: true } 修改代码演示

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

    浅谈JavaScript的面向对象程序设计(一)

    面向对象的语言有一个标志,他们都有类的概念,通过类可以创建多个具有相同属性和方法的对象。但是JavaScript中没有类的概念,因此JavaScript与其他的面向对象语言还是有一定区别的。...数据属性有4个描述其行为的特性。   Configurable:表示能否通过delete关键字删除属性或者把属性修改为访问器属性。configurable默认是true。   ...所在我在第九行修改name的值,并没有效果。name的值依然为test。   ...访问器属性有以下四个特性:   Configurable:表示能否通过delete关键字删除属性或者把属性修改为访问器属性。configurable默认是true。   ...set:在写入属性的值时调用的函数,默认是undefined。

    73670

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

    new绑定 JavaScript中new的机制实 际上和面向类的语言完全不同。 在JavaScript中,构造函数只是一些 使用new操作符时被调用的函数。它们并不会属于某个类,也不会实例化一个类。..., // enumerable: true, // configurable: true // } 在创建普通属性时属性描述符会使用默认值,我们也可以使用 Object.defineProperty(...: true } ); myObject.a; // 2 myObject.b; // 4 在不访问属性值的情况下判断对象中是否存在这个属性: var myObject = { a:2...原型 JavaScript中的对象有一个特殊的 [[Prototype]] 内置属性,其实就是对于其他对象的引用。几乎所有的对象在创建时 [[Prototype]] 属性都会被赋予一个非空的值。...在JavaScript中,我们并不会将一个对象(“类”)复制到另一个对象(“实例”),只是将它们关联起来。这个机制通常被称为原型继承。 构造函数 使用new创建的对象会调用类的构造函数。

    70310

    深入理解继承

    学习怎样创建对象是理解面向对象编程的第一步,第二步是理解继承。在传统的面向对象编程语言中,类继承其他类的属性。...这些方法是: hasOwnProperty():判断对象中有没有某个属性,接受一个字符串类型的属性名作为参数。 propertyIsEnumerable():判断对象中的某个属性是否是可枚举的。...当我们需要使对象在JavaScript中一致工作时,最后两个是非常重要的,有时我们可能希望自己定义它们。   1.3:valueOf() 当我们操作对象时,valueof()方法就会被调用时。...当对象的属性被访问时,JavaScript会首先会在对象的属性中搜索,如果没有找到,则继续在__proto__指向的原型对象中搜索。...在创建Reactangle对象实例的时候没有传递参数,因为它们没有用,如果传递参数了,所有的Square对象实例都会共享相同的尺寸。

    48640

    深入浅出Object.defineProperty()

    ) obj 需要定义属性的当前对象 prop 当前需要定义的属性名 desc 属性描述符 一般通过为对象的属性赋值的情况下,对象的属性可以修改也可以删除,但是通过Object.defineProperty...这也是最常见的属性 命名访问器属性:通过getter和setter进行读取和赋值的属性 内部属性:由JavaScript引擎内部使用的属性,不能通过JavaScript代码直接访问到,不过可以通过一些方法间接的读取和设置...configurable:false不能重新定义属性 等价上一张图的代码 与上一张图的代码进行对比 configurable:true能删除属性 configurable:true能够定义属性 configurable...true改为false,但是无法由false改为true),但是在writable: true的情况下,可以改变value的值 configurable: true时,可以删除当前属性,可以配置当前属性所有描述符...`[[Configurable]]`或`[[Enumerable]]`3: 改变[[Writable]]由false变为true4: 在`[[Writable]]`为`false`时改变`[[Value

    70340

    TypeScript-类装饰器和TypeScript-defineProperty

    前言TypeScript的类装饰器是一种强大的功能,它允许开发者在类声明前应用装饰器函数,以自定义类的行为和属性。这些装饰器可以用于各种用途,如添加元数据、修改类的原型或行为,或者执行某些操作。...类装饰器类装饰器在类声明之前绑定(紧靠着类声明)类装饰器可以用来监视,修改或替换类的定义在执行类装饰器函数的时候, 会把绑定的类作为其唯一的参数传递给装饰器function test(target: any...它允许开发者以精确的方式定义属性的特性,如可枚举性、可配置性和可写性。这对于创建高度可控的对象属性非常有用,尤其在涉及数据封装和对象安全性的情况下。...-配置图片图片如果你在配置之前想让所有的属性都出现在迭代当中,然后后面又不想让其全部出现了那么这个时候在通过 enumerable、configurable = true 改变是没有作用的:let obj...: true});Object.defineProperty(obj, 'name', { enumerable: true, configurable: true});for (let key

    37600

    已阅冴羽大佬文章

    JavaScript 专题之如何判断两个对象相等 构造函数,类的继承,混入 构造函数:类实例是由一个特殊的类方法构造的,这个方法名通常和类名相同,称为构造函数。...这个方法的任务就是 初始化实例需要的所有信息。 类的继承:在面向类的语言中,你可以先定义一个类,然后定义一个继承前者的类。后者通常被称为“子类”,前者通常被称为“父类”。...混入:在继承或者实例化时,JavaScript的对象机制并不会自动执行复制行为。...简单来说,JavaScript中只有对象,并不存在可以被实例化的“类”复制行为,在JavaScript中模拟类的复制行为,这个方法就是混入。...几乎所有的对象在创建时[[Prototype]]属性都会被赋予一个非空的值。 使用in操作符来检查属性在对象中是否存在时,同样会查找对象的整条原型链。

    94820

    JavaScript数据属性和访问器属性

    看《深入理解JavaScript》的this篇时看到“访问器属性”这个不熟悉的名词,百度后找到两篇感觉比较合适的文章,整合记录一下,以参考资料2为主,参考资料1为辅助补充。...在configurable为true的情况下可多次调用Object.defineProperty( )修改同一属性。 在非严格情况下修改无法配置的属性操作会被忽略,在严格模式下会抛出错误。...访问器属性 访问器属性不包含数据值(没有 [[Value]] 特性),它们包含一对 getter 和 setter 函数(这两个函数都不是必须的)。...// enumerable: true, // configurable: false // } 而不使用 var 命令声明变量时(或者使用属性赋值的方式声明变量),变量的可配置性为 true。...参考资料 JavaScript笔记--数据属性和访问器属性 JavaScript 属性类型(数据属性和访问器属性)

    1.6K31

    理论+实践:从原型链到继承模式,掌握 Object 的精髓(一)

    • 在 JavaScript 中有一种错误的说法:JavaScript 中的万物皆对象。...操作符被称为属性访问, [] 操作符被称为键访问。 属性描述符 • 在 ES5 之前,JS 没有提供给检测属性特性的方法,比如判断属性是否只读。..., 是否可写 // enumerable: true, 是否可枚举 // configurable: true 是否可配置 // } • 需要注意的是,即便 configurable: false...• 可在不访问属性值的情况下判断对象中是否存在这个属性: var myObject = { a:2 }; ("a" in myObject); // true ("b" in myObject...对于数组来说这个区别非常重要,4 in [2, 4, 6] 的结果并不是你期待的 True,因为 [2, 4, 6] 这个数组中包含的属性名是 0、1、2,没有 4。

    9710

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

    这个方法允许修改默认的额外选项(或配置)。默认情况下,使用 Object.defineProperty() 添加的属性值是不可修改(immutable)的。...它们共享以下可选键值(默认值是指在使用 Object.defineProperty() 定义属性时的默认值): configurable当且仅当该属性的 configurable 键值为 true ...数据描述符还具有以下可选键值: value该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。 默认为 undefined。...: true, enumerable : true, configurable : true }); // 对象 o 拥有了属性 a,值为 37 // 在对象中添加一个设置了存取描述符属性的示例...如果旧描述符将其configurable 属性设置为false,则该属性被认为是“不可配置的”,并且没有属性可以被改变(除了单向改变 writable 为 false)。

    66840

    js Object.defineProperty()详解

    默认情况下,所有直接定义在对象上的属性的这个特性都是 true; Enumerable:表示属性是否可以通过 for-in 循环返回。...默认情况下,所有直接定义在对象上的属性的这个特性都是 true Writable: 表示属性的值是否可以被修改。...默认情况下,所有直接定义在对象上的属性的这个特性都是 true; Value:包含属性实际的值。这就是前面提到的那个读取和写入属性值的位置。这个特性的默认值为 undefined。...默认情况下,所有直接定义在对象上的属性的这个特性都是 true; Enumerable: 表示属性是否可以通过 for-in 循环返回。...默认情况下,所有直接定义在对象上的属性的这个特性都是 true; Get: 获取函数,在读取属性时调用。默认值为 undefined; Set:设置函数,在写入属性时调用。

    2.4K20

    Javascript对象

    面向对象(Object-Oriented, OO)的语言有一个标志,那就是它们都有类的概念 而通过类可以创建任意多个具有相同属性和方法的对象。...ECMAScript没有类的概念,因此它的对象也与机遇类的语言中的对象有所不同 ES6新增了对象Class的语法糖,这里不讨论ES6 理解对象 1.对象 var person = new Object(...1)数据属性,数据属性有4个描述其行为的特性 [[Configurable]]:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性改为访问器属性。...var person = {}; Object.defineProperty(person, "name", { configurable:true, //设置false之后下次用defineProperty...默认undefined [[Set]]:在写入属性的时候调用的函数。

    39310

    了解JavaScript对象的特殊属性

    理解对象 面向对象最常见的方式就是类,定义一个类之后,由它创建的对象都拥有从类继承而来的方法与属性。然而 JavaScript 里面,至少在 ES6 之前是没有 class的概念的。...所以它的对象与传统类的对象还是有区别的。...删除某个属性,是否可以修改属性的特性,能否改为访问器属性,字面量创建的对象默认值为 true [[Enumerable]]:能否通过 for-in 遍历属性名字,默认为 true [[Writable...,接受三个参数,参数1 为要修改的对象,参数2 为修改的对象,参数3 可以指定多个特殊值的值 如果是对已有属性操作,则改变相应的特殊值就行 如果没有该属性,则认为是通过该方法添加新属性,此时应该显式的定义各项值...configurable 为 true,那么后面的步骤除了修改 writable 以外,修改其他特殊属性以及重写 set 方法都会报错,因为这个 configurable 就是规定每个属性在第一次设置之后是否可以再次修改

    73210

    《你不知道的JavaScript(上)之原型对象》读书笔记

    // enumerable: true, 决定这个描述符控制的是属性是否会出现在对象的属性枚举中。// configurable: true 决定是否可配置对象的值。...: true, enumerable: true } ); myObject.a; // 2常量对象结合 writable:false 和 configurable:false 就可以创建一个真正的常量属性...通常来说,这个链接的作用是:如果在对象上没有找到需要的属性或者方法引用,引擎就 会继续在 [[Prototype]] 关联的对象上进行查找。...虽然这些 JavaScript 机制和传统面向类语言中的“类初始化”和“类继承”很相似,但 是 JavaScript 中的机制有一个核心区别,那就是不会进行复制,对象之间是通过内部的 [[Prototype...也就是说,我们可以选择在 JavaScript 中努 力实现类机制(参见第 4 和第 5 章),也可以拥抱更自然的 [[Prototype]] 委托机制。

    65130

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

    不同的对象在底层都表示为二进制,在JavaScript中二进制前三位都为0的话会被判断为object类型,null的二进制表示全是0,自然前三位也是0,所以执行typeof时会返回“object”。...(myObject, 'a'); //{value: 2, writable: true, enumerable: true, configurable: true} 对象属性对应的属性描述符(数据描述符...一个例外,即使属性configurable:false,还是可以把writable的状态由true改为false,但无法由false改为true。...如果没有找到名称相同的属性,按照[[Get]]算法的定义会遍历可能存在的[[Prototype]]链(原型链)。..._a_ = val * 2; } } myObject.a = 2; console.log(myObject.a);//4 1.3.10 存在性 我们可以在不访问属性值的情况下判断对象是否存在这个属性

    66120
    领券