精华内容
下载资源
问答
  • 属性描述对象,对象拷贝

    千次阅读 2020-07-04 20:49:29
    属性描述对象 // 默认值 { value: undefined, writable: true, enumerable: true, configurable: true, get: undefined, set: undefined } // 属性描述对象提供6个元属性。 对象的拷贝 var extend = ...

    属性描述对象

    // 默认值
      {
      value: undefined,
      writable: true,
      enumerable: true,
      configurable: true,
      get: undefined,
      set: undefined
      }  
    

    // 属性描述对象提供6个元属性。

    对象的拷贝

    var extend = function (to, from) {
        for (var property in from) {
          to[property] = from[property];
        }
    
        return to;
      }
    
      extend({}, {
        a: 1
      })
      // {a: 1}  
    
      // 为了解决这个问题,我们可以通过Object.defineProperty方法来拷贝属性。
      var extend = function (to, from) {
        for (var property in from) {
          if (!from.hasOwnProperty(property)) continue;
          Object.defineProperty(
            to,
            property,
            Object.getOwnPropertyDescriptor(from, property)
          );
        }
    
        return to;
      }
    
      extend({}, { get a(){ return 1 } })
      // { get a(){ return 1 } })
    

    // 上面代码中,hasOwnProperty那一行用来过滤掉继承的属性,否则可能会报错,因为Object.getOwnPropertyDescriptor读不到继承属性的属性描述对象。

    function copyObject(orig) {
        var copy = Object.create(Object.getPrototypeOf(orig));
        copyOwnPropertiesFrom(copy, orig);
        return copy;
      }
    
      function copyOwnPropertiesFrom(target, source) {
        Object
          .getOwnPropertyNames(source)
          .forEach(function (propKey) {
            var desc = Object.getOwnPropertyDescriptor(source, propKey);
            Object.defineProperty(target, propKey, desc);
          });
        return target;
      }
    
      // 另一种更简单的写法,是利用 ES2017 才引入标准的Object.getOwnPropertyDescriptors方法。
      function copyObject(orig) {
        return Object.create(
          Object.getPrototypeOf(orig),
          Object.getOwnPropertyDescriptors(orig)
        );
      }
    
    展开全文
  • 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属性。

    展开全文
  • 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

    展开全文
  • js 删除对象属性

    千次阅读 2018-07-18 23:07:22
    问题描述 更新表时,发现id不是该条记录对应的id值,而是操作另外一个tab页面后form表单映射的id值覆盖了原记录id的值,导致保存后,该条记录...通过js中的delete命令可以删除对象的指定属性,如下: delete obj.i...

    问题描述

    更新表时,发现id不是该条记录对应的id值,而是操作另外一个tab页面后form表单映射的id值覆盖了原记录id的值,导致保存后,该条记录的数据没更新到。

    解决方法

    避免其他页面的id值覆盖要更新页面的记录id值,通过其他页面填充表单时,把其id属性删除,这样就不会影响所需更新记录的id值了。

    通过js中的delete命令可以删除对象的指定属性,如下:

    delete obj.id;



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

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

    千次阅读 2019-01-09 13:21:54
    文章目录1. 最常用的js对象是字面量形式的对象2.... 读取属性描述对象Object.getOwnPropertyDescriptor() 1. 最常用的js对象是字面量形式的对象 例如:创建一个person对象。 var person = ...
  • javascript 设置对象属性只读

    千次阅读 2019-03-07 16:58:02
    javascript 设置对象属性只读 在设置对象属性只读之前,咱们先来了解一下对象的数据属性,所谓的数据属性就是包含一个数据值的位置。在这个位置可以读取和写入值。数据属性有 4 个描述其行为的特性。 [...
  • 属性描述对象 概述 Object.getOwnPropertyDescriptor() Object.getOwnPropertyNames() Object.defineProperty(),Object.defineProperties() Object.prototype.propertyIsEnumerable() 元属性 value writable ...
  • java两个对象比较属性

    万次阅读 2021-09-10 11:25:45
    // 获取object的属性描述 PropertyDescriptor[] pds = Introspector.getBeanInfo(clazz, Object.class).getPropertyDescriptors(); for (PropertyDescriptor pd : pds) {// 这里就是所有的属性了 String name = pd....
  • Object.defineProperty定义对象属性

    千次阅读 2019-12-23 16:32:39
    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。 语法: Object.defineProperty(obj, prop, ...将被定义或修改的属性描述符。 value:属性...
  • 在js属性描述符这部分有几个较难理解的名词概念,本文旨在描述自己对它们的理解,主要包括:[[Get]]/[[Put]]、get/set、getter/setter几个概念的阐述,数据属性和访问器属性。 属性 首先我们要搞清楚属性的概念,...
  • 前言: 面向对象这个概念在很多语言中都有接触过,尤其在c++中这个概念就是整个...面向对象是一种使用封装、继承、多态、抽象等思想进行软件的分析和开发的方法,而java就是一门面向对象编程的语言。 1. 对象和类...
  • JS Window对象属性和方法

    千次阅读 2016-08-16 11:43:38
     ... ...Window 对象属性 属性 描述 IE F O closed 返回窗口是否已被关闭。 4 1 9 defaultStatus 设置或返回窗口状态栏中的默认文本。 4
  • 描述:判断一个输入框中的值是在一个对象中的解决办法 var obj = {'name':'孙悟空','age':10,'address':'水帘洞'};//定义对象 //联想功能校验 var continueFor = 0; for(var item in obj ){ //判断对象中 if...
  • 对象是JS的基本数据类型。对象是一种复合值,ta
  • 关于对象属性行为configurable的问题

    千次阅读 2017-08-12 08:45:23
    我们知道,在js中类中(Object)中的属性有4个描述起行为的特性: Configurable:表示能否通过delete删除属性从而重新定义属性; Enumerable:表示能否通过for-in循环返回属性 writable:表示能否修改属性的值 ...
  •    通常,数据对象属性描述。数据对象又称样本、实例、数据点或对象。如果数据对象存放在数据库中,则它们是数据元组。也就是说,数据库的行对应于数据对象,而列对应于属性。本节,我们定义属性,并且考察各
  • 对象属性属性值遍历

    千次阅读 2018-05-29 19:32:23
    题目描述找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)1、返回数组,格式为 key: value2、结果数组不要求顺序示例1输入复制var C = function() {this.foo = 'bar'; this.baz = 'bim';}...
  • 标题简单描述:先将一个对象放入session,只对对象属性值进行修改,但不将修改后的对象存放session中,发现session中存放的对象属性值也相对应的改变。Person person=new PerSon();request.getSession()....
  • 出处:http://blog.csdn.net/zzxxbb112 相信很多有经验的自动化测试人员都知道虚拟对象是QTP工具提供的一个可以识别任意测试对象的一种识别方式,但是此种识别方式的缺点很明显,就是需要通过坐标来映射一个区域为...
  • 对象的每个属性都有一个描述对象,用来控制该属性的行为,Object.getOwnPropertyDescriptor方法可以获取该属性描述对象描述对象的enumerable属性,称为可枚举性,如果为true,为可枚举的,如果为false,就表示...
  • 理解javascript对象的数据属性...属性就是与对象相关的值,而数据属性和访问器属性,就是属性属性,用于描述属性的行为特性。 2.数据属性 数据属性(property)用于实现JavaScript引擎,是属性(property)的内...
  • javascript的table 对象 属性 方法

    千次阅读 2012-09-20 17:51:07
    javascript的table 对象 属性 方法 Table对象集合 Table对象:表示HTML文档中的表,对于文档中每个标记,浏览器都创建一个Table对象. 集合 描述 cells[]获取包含表格中所有单元格的数组...
  • python类、对象、方法、属性之类与对象

    千次阅读 多人点赞 2016-03-09 10:49:38
    我们通过描述属性(特征)和行为来描述一个对象的。比如家里的小狗,它的颜色,大小,年龄,体重等是它的属性或特征。它会汪汪叫,会摇尾巴等是它的行为。 我们在描述一个真实对象(物体)时包括两个方面: 1.它...
  • 对象属性、方法、 封装与继承

    千次阅读 2017-10-03 22:09:40
    对象:用来描述客观事物的一个实体,又一组属性和方法构成 属性对象具有的各种特征,每个对象的每个属性都拥有特定值 方法:对象执行的操作 类图详解: 如图 类的产出 从对象中归纳、抽象出类 根据"对象"抽象...
  • ES6中对象的字面量是发生了翻天覆地的变化,变得非常简便 目录 属性简洁表达式 属性名表达式 方法的name属性 属性简洁表达式 ES6中允许使用变量来作为属性和方法,书写更简便。 const foo = "bar"...
  • input Text 对象常用属性

    千次阅读 2016-08-04 21:12:59
    Text 对象属性 属性 描述 IE F O W3C accessKey 设置或返回访问文本域的快捷键。 4 1 9 Yes alt 设置或返回当浏览器不支持文本域时供显示的替代文本。 ...
  • Python 中文件对象属性和方法简介

    千次阅读 2016-01-11 11:24:25
    Python 中文件对象的属性和方法简介 语法 描述 f.close() 关闭文件对象f,并将属性f.closed设置为True ... 返回底层文件的文件描述符(只对那些有文件描述符的文件对象是可用的) f.flush() 清空
  • JavaScript学习笔记:对象属性的枚举

    千次阅读 2017-01-03 17:44:00
    JavaScript中对象属性分为两种: 数据属性 和 访问器属性 。然后根据具体的上下文环境的不同,又可以将属性分为: 原型属性 和 实例属性 。原型属性是定义在对象的原型( prototype )中的属性,而实例属性一方面...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 823,153
精华内容 329,261
关键字:

对象的属性是描述对象的