精华内容
下载资源
问答
  • 对象的属性是描述对象的
    千次阅读
    2019-08-09 09:50:18

    1,定义

    类属性:又叫做静态属性,即被static修饰。

    对象属性:又叫实例属性,非静态属性。

    如果一个属性声明成类属性,那么所以的对象,都共享这么一个值。

    给所以英雄设置一个类属性叫做“版权(copyright)”,那么无论有多少具体的英雄,所以的英雄的版权都属于Riot Games公司。

    2,访问类属性

    1),对象.类属性

    temoo.copyright;
    

    2),类.类属性

    Hero.copyright;
        这两种方式都可以访问类属性,访问即修改和获取,但建议使用第二种  类.类属性  的方式进行,这样更符合语义上的理解。

    3,什么时候用对象属性,什么时候用类属性

    如果一个属性,每一个英雄都不一样,比如name,这样的属性就应该设计为对象属性,因为它是 跟着对象走的 ,每个对象的name都是不一样的。

    如果一个属性,所有的英雄都共享,都是一样的,那么就应该设计为类属性,比如说英雄的血量上限都是9999,不会因为英雄不同而取不同的值。这样的属性,就适合设计为类属性。

    版权声明:本文为CSDN博主「宇智波爱编程」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/weixin_39590058/article/details/79861723

    更多相关内容
  • ES5中对象属性可以分为数据属性和访问器属性 数据属性 数据属性包含以下4个特性: [[configurable]]:表示属性是否可以被delete,是否可以被重新修改,或者是否可以被修改成访问器属性 [[enumerable]]:是否可...

    ES5中对象的属性可以分为数据属性和访问器属性

    1. 数据属性
      数据属性包含以下4个特性:
      [[configurable]]:表示属性是否可以被delete,以及其他3个属性描述符的值是否可以被修改,甚至改写成访问器属性(Vue的ObServer就是这样进行数据劫持的)
      [[enumerable]]:是否可枚举,是否能通过for in 循环返回该属性
      [[writable]]: 是否可修改
      [[value]]:属性的数据值,默认是undefined
      数据属性可以通过字面量形式直接定义(包括obj.proper),或者通过Object.defineProperty(obj)来定义,如:
    var obj = {
    	_name: 'zyp',
    	_age: 18,
    }
    Object.defineProperty(obj, 'like', {
    	value: 'sleep'
    })
    

    用Object.getOwnPropertyDescriptors(obj)可以获取对象的所有属性,包括属性的特性。

    var propers = Object.getOwnPropertyDescriptors(obj)
    console.log('propers', propers)
    

    输出的结果见下图,我们可以看到:通过字面量直接定义的数据属性的[[configurable]]、[[enumerable]]、[[value]]三个特性值均默认为true;通过defineProperty()定义的数据属性的[[configurable]]、[[enumerable]]、[[value]]三个特性值均默认为false。
    在这里插入图片描述
    2. 访问器属性(ie9+支持
    访问器属性包含以下4个特性:

    [[configurable]]:表示属性是否可以被delete,以及其他3个属性描述符的值是否可以被修改,甚至改写成数据属性。
    [[enumerable]]:是否可枚举,是否能通过for in 循环返回该属性
    [[set]]:设置属性值是访问的函数。默认是undefined
    [[get]]:读取属性值是访问的函数。默认是undefined
    访问器属性只能通过Object.defineProperty(obj)来进行定义,如:

    Object.defineProperty(obj, 'name', {
    	get: function() {
    		return this._name
    	},
    	set: function(newVal) {
    		this._name = newVal
    	}
    })
    var propers = Object.getOwnPropertyDescriptors(obj)
    console.log('propers', propers)
    

    同样,通过defineProperty()函数定义的访问器属性的[[configurable]]、[[enumerable]]两个特性值均默认为false,如图:
    在这里插入图片描述

    如果只定义了set特性或者只定义了get特性

    Object.defineProperty(obj, 'age', {
    	set: function(newVal) {
    		this._age = newVal
    	}
    })
    var propers = Object.getOwnPropertyDescriptors(obj)
    console.log('propers', propers)
    var age = obj.age //得到的age值为undefined
    

    因此,在非严格模式下,如果只定义了set特性,那么获取得到该访问器属性的值为undefined, 严格模式下会报错(高程上是这么说的,但是实际在chrome控制台中用’use strict’并没有抛出错误)。

    接下来对数据属性和访问器属性共有的configurable特性进行研究:
    针对obj中的数据属性_age和_name

    • _age属性的configurable特性值为true,我们可以对其enumerable、writable、 value三个特性进行修改。
    Object.defineProperty(obj, '_age', {
    	enumerable: false,
    	writable: false,
    	value: 19
    })
    var propers = Object.getOwnPropertyDescriptors(obj)
    console.log('propers', propers)
    

    在这里插入图片描述
    也可以将其修改为访问器属性,或者直接delete该属性,这里只演示delete操作。

    delete obj._age
    var propers = Object.getOwnPropertyDescriptors(obj)
    console.log('propers', propers)
    

    在这里插入图片描述

    • 我们将_name的configurable属性为false后,我们只能将writable特性修改为false,不能修改其他特性,否则会报错。
    Object.defineProperty(obj, '_name', {
       	configurable: false
    })
    Object.defineProperty(obj, '_name', {
       	writable: false
    })   //不报错
    Object.defineProperty(obj, '_name', {
       	value: 'zyp1'
    })   
    

    在这里插入图片描述
    也不能进行delete操作(无效)。

    delete obj._name
    

    在这里插入图片描述

    注意:数据属性的特性和访问器属性的特性不能同时存在于一个属性中。
    参考:JavaScript高级程序设计(第3版) 6.1.1

    展开全文
  • ES5中的对象是指无序的属性的集合。(属性可以是基本值、对象和函数)。 属性类型 对象的属性类型有两种,一种是数据属性,是数据值的保存位置;另一种是访问器属性,包含getter和setter函数。 数据属性 数据属性...

    理解对象

    ES5中的对象是指无序的属性的集合。(属性可以是基本值、对象和函数)。

    对象的属性类型有两种,一种是数据属性,是数据值的保存位置;另一种是访问器属性,包含getter和setter函数。

    1.1 数据属性

    数据属性包含一个数据值的位置,在这个位置可以读取和写入值。数据属性有四个描述其特征的特性。(这些特性是为javascript内部引擎服务的,不能直接访问,所以将它们放在方括号中。)

    1. [[Configurable]]:表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性。默认值为true。
    2. [[Enumerable]]: 能否通过for-in循环返回属性。默认值为true。
    3. [[Writable]]:能否修改属性的值,默认值为true。
    4. [[Value]]: 属性的数据值,默认为undefined。

    !!!此处说的默认值是指直接定义时的默认值,与使用defineProperty()定义的属性默认值不同

    数据属性可以直接使用对象字面量或new Object对象来定义,而这些特性值不能直接访问,要修改默认的特性,要使用定义在Object对象中的defineProperty()函数

    !!!在调用 Object.defineProperty()方法时,如果不指定configurable、enumerable 和writable 特性的默认值都是 false。

    示例如下:

    // 使用对象字面量创建一个对象
    var person = {};
    
    //修改该对象属性的默认特性
    /*
    	第一个参数为属性所在的对象。
    	第二个参数为要定义的属性名。
    	第三个参数是其特性描述符的对象。(属性为configurable, enumerable, writable, value)
    */
    Object.defineProperty(person, "name", { 
     writable: false, 
     value: "Nicholas" 
    });
    
    //这样就可以访问定义好的数据属性了
    alert(person.name); //"Nicholas" 
    
    //在定义属性时将writable设定为false,所有对name属性的值更改操作无效。(严格模式下会报错)
    person.name = "Greg"; 
    alert(person.name); //"Nicholas"
    

    另外将把 configurable 设置为 false,表示不能从对象中删除属性。如果对这个属性调用 delete,则在非严格模式下什么也不会发生,而在严格模式下会导致错误。一旦把属性定义为不可配置的,就不能再把它变回可配置了。 此时,Object.defineProperty()方法修改除 writable 之外的特性,都会导致错误。

    1.2 访问器属性

    访问器属性不包含数据值,包含一对 getter 和 setter 函数(不必需)。
    在读取访问器属性时,会调用 getter 函数,这个函数负责返回有效的值;
    在写入访问器属性时,会调用setter 函数并传入新值,这个函数负责决定如何处理数据。
    访问器属性也包含了四个特性。

    1. [[Configurable]]: 表示能否通过 delete 删除属性从而重新定义属性,能否修改属性的特性,或者能否把属性修改为数据属性。默认值为true。
    2. [[Enumerable]]: 能否通过for-in来访问属性。默认值为true。
    3. [[Get]]: 读取属性时调用的函数。默认值为undefined。
    4. [[Set]]:写入属性时调用的函数,默认值为undefined。

    访问器属性不能直接定义,必须要使用Obiect.defineProperty()来定义。定义的过程于数据属性类似。

    var book = { 
     _year: 2004,  //'_'是一种常用于表示只能通过对象方法访问的属性的记号
     edition: 1 
    }; 
    /*
    	第一个参数为属性所在的对象。
    	第二个参数为要定义的访问器属性名。
    	第三个参数是其特性描述符的对象。(属性为configurable, enumerable, get, set)
    */
    Object.defineProperty(book, "year", { 
    // 访问一个私有变量
     get: function(){ 
     return this._year; 
     }, 
     // set常用于改变一个变量导致其他变量改变的情形
     set: function(newValue){ 
     if (newValue > 2004) { 
     this._year = newValue; 
     this.edition += newValue - 2004; 
     } 
     } 
    }); 
    book.year = 2005; 
    alert(book.edition); //2
    

    不一定非要同时指定 getter 和 setter。
    只指定 getter 意味着属性是不能写,在非严格模式下尝试写入属性会被忽略。
    类似地,只指定 setter 函数的属性也不能读,在非严格模式下会返回 undefined。
    在严格模式下,尝试写入只指定了 getter 函数的属性和读取只指定了 setter函数的属性会抛出错误。

    定义多个属性

    上面介绍的Object.defineProperty()方法只能定义单个属性,Object.defineProperties()方法可以通过描述符一次定义多个属性。
    !!!在调用 Object.defineProperties()方法时,如果不指定configurable、enumerable 和writable 特性的默认值都是 false。
    示例如下:

    var book = {}; 
    Object.defineProperties(book, { 
    	//定义数据属性
    	 _year: { 
    	 	value: 2004 
    	 }, 
    	 edition: { 
    	 value: 1 
    	 }, 
    	 // 定义访问器属性
    	 year: { 
    		 get: function(){
    		 	return this._year; 
    		 }, 
    		 set: function(newValue){ 
    			 if (newValue > 2004) { 
    			 this._year = newValue; 
    			 this.edition += newValue - 2004; 
    		 	} 
    	 	} 
    	} 
    });
    

    读取属性的特性

    JS中的Object。getOwnPropertyDescriptor()方法可以取得给定的对象属性描述符。对上一节中定义的book对象,有以下示例:

    // 该方法接受两个参数  第一个参数是对象   第二个参数是对应的属性
    var descriptor = Object.getOwnPropertyDescriptor(book, "_year"); 
    alert(descriptor.value); //2004 
    alert(descriptor.configurable); //false
    alert(typeof descriptor.get); //"undefined" 
    
    var descriptor = Object.getOwnPropertyDescriptor(book, "year"); 
    alert(descriptor.value); //undefined 
    alert(descriptor.enumerable); //false 
    alert(typeof descriptor.get); //"function"
    

    在 JavaScript 中,可以针对任何对象——包括 DOM 和 BOM 对象,使用 Object.getOwnPropertyDescriptor()方法。

    展开全文
  • JS面向对象之对象属性的属性

    千次阅读 2018-06-27 10:24:02
    ECMAScript的定义中,对象的属性有两种,一种是数据属性,另一种是访问器属性 ...下面就来聊聊对象属性的两种类别。   1.数据属性 这种属性包含有一个存放数据值的属性[[Value]],数据属性共有4个描述其行为的属...

    ECMAScript的定义中,对象的属性有两种,一种是数据属性,另一种是访问器属性

    我们知道JS中有基本数据类型和对象,对象中的属性也无外乎是这些类型,可是作为对象的属性,这些属性本身却也多了一些特殊的属性,而且属性种类的不同也会使属性的属性有些许的差别。下面就来聊聊对象属性的两种类别。

     

    1.数据属性

    这种属性包含有一个存放数据值的属性[[Value]],数据属性共有4个描述其行为的属性

    • [[Configurable]]:这个属性表示能否用delete语句删除属性,能否修改属性的属性。默认为true。
    • [[Enumerable]]:这个属性表示能否在使用for-in循环遍历对象属性时访问到该对象。默认为true。
    • [[Writable]]:这个属性表示能否修改属性的值。默认为true。
    • [[Value]]:这个属性用于存放属性的数据值。

     

    var course = {
        name: "Operation System"
    }

     

    在这个例子中我创建了一个course对象,这个对象有一个name属性,name这个属性的Configuralbe, Enumerable和Writable属性都为true,而Value属性则为"Operation System"。

     

    若是想要修改属性的属性,则必须使用Object.defineProperty()方法。该方法接受三个参数,第一个是属性所在对象,第二个是属性的名字,第三个是描述符对象(descriptor).描述符对象的属性只能是上述四种属性,但不一定全部都要有。例如

    Object.defineProperty(course, "name", {
        value: Assembler Language,
        writable: false
    })
    
    course.name = "English"
    alert(course.name) //Assembler Language

    我们把course的name属性的writalbe属性改成了false,将value属性改为"Assembler Language",也就是说name属性此时已经变为一个只读属性,所以当我们再次修改course的name属性时会发现修改无效。(若是在严格模式下会导致错误) 如果我们把name属性的configurable属性也改成false的话,则对属性的所有属性进行修改都会导致报错(也不能把configurable改回true)

    注:如果调用Object.defineProperty()方法来创建对象新属性,如果不指定,那么他的configuralbe, writable, enumerable属性全为false。

     

     

    2.访问器属性

    访问器属性不包括数据的值,但它包含有getter和setter函数(并不必须,只指定getter意味着只读,只指定setter意味只能写入)。同数据属性一样,访问器属性也包含四个描述其行为的属性。

    • [[Configurable]]:同上。
    • [[Enumerable]]:同上。
    • [[Get]]:在获取属性时调用的函数。
    • [[Set]]:在设置属性时调用的函数。

    注:访问器属性不能被直接定义,必须使用Object.defineProperty()方法

     

    var person = {
        _age: 20
    };
    
    Object.defineProperty(person, "age", {
        get: function(){
            return this._age;
        },
        set: function(){
            this._age++;
        }
    })

    在这个例子中,我创建了一个person对象,里面有一个_age属性并赋值为20,然后我们又通过Object.defineProperty()为person新定义了一个age属性,并定义了getter和setter函数。那么在每次对person对象的age属性进行修改时都会使_age自增。而在调用person.age时,也都返回的是person的_age属性。

    展开全文
  • JavaScript 属性描述

    千次阅读 2020-10-15 09:24:39
    Object.defineProperty   Object.defineProperty 用于指定对象属性的描述符。   函数的第三个参数descriptor为属性的描述符,包括数据描述符和存取描述符两种。   注意属性描述符固定包括configurable、...
  • ES6+ | 对象属性与方法简写

    千次阅读 2019-03-20 14:52:12
    在JavaScript中,对象字面量是创建对象是一种简洁方式,形式如下: let a = 3 let obj = { a: a, b: 'b', func: function () { console.log(this.a,this.b) } } 在ES6之前,对象字面量的属性与方法必...
  • 一、针对 单个 对象移除属性,序列化时忽略处理 JObject实例的 Remove() 方法,可以在 指定序列化时移除属性和值 示例如下 : 这里要注意的地方: 1.属性移除仅对当前 对象属性起作用 2.指定移除 的 key...
  • 五、数据对象属性类型

    千次阅读 2020-03-02 11:44:21
    通常数据对象属性描述,又称样本、实例或数据点。 销售数据库中 :对象可以顾客、商品或销售; 医疗数据库中,对象可以是医生或患者; 大学数据库中,对象可以是学生、教授和课程; 2 属性的概念 属性是一个数据...
  • js 删除对象属性

    千次阅读 2018-07-18 23:07:22
    问题描述 更新表时,发现id不是该条记录对应的id值,而是操作另外一个tab页面后form表单映射的id值覆盖了原记录id的值,导致保存后,该条记录...通过js中的delete命令可以删除对象的指定属性,如下: delete obj.i...
  • 这里是很显而易见的! 然后我们用for in 对他进行遍历,他的区别就出来了。
  • JavaBean对象属性copy

    千次阅读 2019-07-15 20:37:12
    1.对象属性拷贝的常见方式及其性能   在日常编码中,经常会遇到DO、DTO对象之间的转换,如果对象本身的属性比较少的时候,那么采用Hard Code工作量也不大,但如果对象的属性比较多的情况下,Hard Code效率就比较低...
  • 两个对象List根据属性取交集和差集

    千次阅读 多人点赞 2020-05-16 11:07:13
    } 业务比对 我们定义了People实体可以看出身份证是唯一的所以我们比对数据时可以用code这个属性来比较那么对应的业务需求可以描述成这样 List existPeopleList = 查询数据库; List newPeopleList = excel读取的新...
  • 首先,vue.js官网是如此描述的 一般情况下我们在项目全局引用了Vue,所以在方法中调用this.$delete( )即可, 注意 Vue.$delete(target,‘object’)方法 第二个参数是字符串[也就是我们要删除的属性] data() { ...
  • object对象属性不被修改

    千次阅读 2018-04-20 22:01:46
    方法1:var obj = {name: "xiaohong"...方法2(设置对象中某一属性不被修改):var obj = {name: "xiaohong"};Object.defineProperty(obj,"name",{writable:false});
  • 【C++】什么是对象?什么是类?

    千次阅读 多人点赞 2021-03-27 18:47:32
    “有对象吗?没有! new 一个。”当第一次接触面向程序设计语言Java时,大家都会拿这句话作为调侃,但是,作为一个大三的学生,如果还是对“对象”有着浅层次的理解,确实有点说不过去啦! 文章目录1、什么是对象?1.1 ...
  • Object.defineProperty定义对象属性

    千次阅读 2019-12-23 16:32:39
    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。 语法: Object.defineProperty(obj, prop, ...将被定义或修改的属性描述符。 value:属性...
  • 案例场景:在设计一张数据库表的时候,通常会包含下列信息:createBy(创建人)、createTime(创建时间)、updateBy(修改人)、updateTime(修改时间)、otherinfo(其它属性信息)。 在一般的业务逻辑编写过程中,绝...
  • Java对象数组按照其属性排序的方法

    千次阅读 2018-11-14 23:17:04
    当我们有一组物品也就是一个对象数组时,我们会希望这组物品按照它的某个属性来排序 也就是需要对象数组按照其属性排序 一 类定义时实现Comparable接口,定义自身的比较算法。 要排序就要有比较的方法, 因为是...
  • javascript 设置对象属性只读

    千次阅读 2019-03-07 16:58:02
    javascript 设置对象属性只读 在设置对象属性只读之前,咱们先来了解一下对象的数据属性,所谓的数据属性就是包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有 4 个描述其行为的特性。 [...
  •    通常,数据对象属性描述。数据对象又称样本、实例、数据点或对象。如果数据对象存放在数据库中,则它们是数据元组。也就是说,数据库的行对应于数据对象,而列对应于属性。本节,我们定义属性,并且考察各
  • ES6中对象的字面量是发生了翻天覆地的变化,变得非常简便 目录 属性简洁表达式 属性名表达式 方法的name属性 属性简洁表达式 ES6中允许使用变量来作为属性和方法,书写更简便。 const foo = "bar"...
  • 前言: 面向对象这个概念在很多语言中都有接触过,尤其在c++中这个概念就是整个...面向对象是一种使用封装、继承、多态、抽象等思想进行软件的分析和开发的方法,而java就是一门面向对象编程的语言。 1. 对象和类...
  • VB对象及其属性、事件和方法

    千次阅读 2020-09-15 12:41:57
    对象,是基于对现实世界的描述对象是类的实例化,类是抽象的概念,而对象则是类的实际存在,对象是程序设计的基本实体,例如人是一个类,而小明、小王则是类的实例化,是一个具体的人,他就是人类的实例化对象。...
  • 属性描述对象,对象拷贝

    千次阅读 2020-07-04 20:49:29
    属性描述对象 // 默认值 { value: undefined, writable: true, enumerable: true, configurable: true, get: undefined, set: undefined } // 属性描述对象提供6个元属性。 对象的拷贝 var extend = ...
  • 在JavaScript中,对象的属性有可枚举和不可枚举之分,它是由对象属性描述符`enumerable`决定的。如果该属性是可枚举性的那么这个属性就能被`for…in`查找遍历到。
  • 类:具有同种属性对象...属性:用来描述具体某个对象的特征的是属性,是静态的。比如:姚明身高2.6米多;小白的毛发是棕色的;二郎神额头上有只眼睛; 方法:每个对象有它们自己的行为或者是使用它们的方法,比...
  • 之前设置了壁文件夹的共享属性,添加了一个everyone用户,并分配了完全控制的权限,结果
  • js 创建对象属性、方法

    千次阅读 2016-09-19 11:45:14
    根据JS的对象扩展机制,用户可以自定义JS对象,这与Java语言有类似的地方。 与自定义对象相对应的是JS标准对象,... 2,原型(prototype) 在JS中,这是一种创建对象属性和方法的方式,通过prototype可以为对象添加新
  • js中Object对象常用方法和属性

    千次阅读 2017-12-04 22:16:08
    Object自带一个prototype的属性,即Object.prototype,Object.prototype本身也是一个对象,也会有一些属性和方法。如下:  1、属性  Object.prototype.writable:默认为false  Object.prototype.enumerable:...
  • 什么是面向对象,以及什么是类和对象

    千次阅读 多人点赞 2019-08-11 19:04:04
    ​ 面向对象是一种现在最为流行的程序设计方法 。将面向过程与面向对象进行比较。 ​ 首先这两个种都是一种编程思维, 在一些简单的动作看来面向过程可能更加容易实现,它不用创建对象来进行实现,执行几步或一步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 928,959
精华内容 371,583
关键字:

对象的属性是描述对象的