js对象可扩展性和属性的四个特性(下)

# js对象可扩展性和属性的四个特性(下)

一、前言

  • 再次花时间回顾一下基础,毕竟要想楼建的好,地基就要牢固,嘻嘻!
  • 在开始之前需要具备对prototype、__proto__、constructor有一定得了解,可以看看我之前写的一篇文章=>通道
  • 之前的用户管理系统已经差不多了,顺便加了个socket聊天的,但是由于做java后台的哪个朋友节奏跟不上来,所以即时聊天的后台就是node+socket-io写的,由于用户列表也涉及比较多的用户隐私问题,所以我设置了页面权限和接口权限,然后下面开放的几个账号就只能看到几个页面而已,哈哈。=>通道
  • 体验账号1:账号:“123456”。密码:“123456”
  • 体验账号2:账号:“123123”。密码:“123123”

二、目录

  • 对象属性的四个特性
  • 对象的可扩展性
  • 删除属性
  • 检测属性
  • 枚举属性
  • 属性的getter和setter

三、删除属性

1、用指定对象作为原型创建对象

Object.create()

说明:

  • 第一个参数是新建对象的原型
  • 第二个参数也就是属性和特性描述的集合
    const log = console.log;
    //返回数据数据的描述
    var aa = Object.create({ x: 1 }, {
        y: {
            value: 1,
            writable: false,
            enumerable: false,
            configurable: true
        }

    })
    log(aa)
    log(Object.getOwnPropertyDescriptor(aa,'y'))

2、删除对象属性

delete

说明:

  • delete只是断开属性和宿主对象的联系,而不会去操作属性中的属性。
  • delete只能删除自有属性,不能删除继承属性。
  • delete不能删除可配置为false的属性
    const log = console.log;
    //返回数据数据的描述
    var aa = {y:2}
    Object.defineProperty(aa, 'x', {
            value: 1,
            writable: true,
            enumerable: true,
            configurable: false
        })
    log(aa);
    log(delete aa.x);
    log(delete aa.y);
    log(aa)


四、检测属性

1、检测对象是否拥有某个属性

in

说明:

  • in运算符不仅仅回检测对象自有属性,还会检测继承属性
    const log = console.log;
    var aa={x:1};
    log('x' in aa);
    log('y' in aa);
    log('toString' in aa)

2、检测对象是否拥有某个属性

hasOwnProperty()

说明:

  • hasOwnProperty只会检测对对象自有属性,不会检测继承属性
    const log = console.log;
    var aa={x:1};
    log(aa.hasOwnProperty('x'));
    log(aa.hasOwnProperty('y'));
    log(aa.hasOwnProperty('toString'))

3、检测对象是否拥有某个属性

propertyIsEnumerable()

说明:

  • propertyIsEnumerable属性只检测自有属性的可枚举属性
    const log = console.log;
    var aa = { x: 1 };
    Object.defineProperty(aa, 'y', {
        value: 1,
        writable: true,
        enumerable: false,
        configurable: true
    })
    log(aa)
    log(aa.propertyIsEnumerable('x'));
    log(aa.propertyIsEnumerable('y'));
    log(aa.propertyIsEnumerable('toString'))


五、枚举属性

1、枚举对象中的属性

Object.keys()
    const log = console.log;
    var aa = { x: 1 ,y:2};
    Object.defineProperty(aa, 'z', {
        value: 3,
        writable: true,
        enumerable: false,
        configurable: true
    })
    log(aa)
    log(Object.keys(aa))

2、枚举对象中的属性

Object.getOwnPropertyNames()
    const log = console.log;
    var aa = { x: 1 ,y:2};
    Object.defineProperty(aa, 'z', {
        value: 3,
        writable: true,
        enumerable: false,
        configurable: true
    })
    log(aa)
    log(Object.getOwnPropertyNames(aa))


六、属性的getter和setter

说明:

  • 由get和set定义的属性叫做存取器属性
  • 不同于普通属性它不是一个具体的值,而是由两个方法构成
    const log = console.log;
    var aa = { x: 1 ,
    get y(){
        return 1000;
    },
    set y(value){
        this.x+=value;
    }
    };
    log(aa)
    aa.y=1;
    log(aa)

原文地址:https://www.cnblogs.com/Juaoie/p/12005768.html

时间: 2025-01-07 13:44:43

js对象可扩展性和属性的四个特性(下)的相关文章

js对象字面量属性间相互访问的问题 和 这个问题与执行环境的关系

对象字面量属性间无法相互访问的问题: 我曾经在定义一个对象时, 并出于复用性的考虑试图复用某些属性: // test 1 var person = { firstName : "Bill", lastName : "Gates", fullName : firstName + " " + lastName // 这里报错 } alert(person.firstName); alert(person.lastName); alert(person

js对象数组按属性快速排序

前一篇<关于selector性能比赛>中提到,目测觉得在$("div,p,a")这样有逗号时,sizzle耗时异常(600多个元素,花了200ms),说是它可能没有优化ie下的排序.按所推荐的程序在IE下跑了下,的确,排序耗时很小. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 /* * 快速排序,按某个属性,或按“获取排序

js对象中的属性检测

最近项目里遇到一个问题,页面加载时候对window对象进行渲染,渲染过程中对window增加了一个对象obj,之后又加载一个文件,向obj增加了一个属性para,但这个过程是异步的. 之后需要检测window是否有obj对象,而obj对象是否有para属性.由于是异步的.执行这个操作时候可能并没有渲染至para上,这时候需要使用if..else..进行另一套操作. 这时候遇到一个问题,如何判断window对象是否有obj对象,且obj对象是否有para属性? 之前使用的是'obj' in win

面对对象之私有属性,以及单、双下划线 | Pythoon

# 在很多程序中会遇到__name,_name的标识符,在类中,如果属性带有双 # 下划线,表示私有属性,通俗的讲,就是不能在类命名空间外被直接调用,但是 # 可以通过方法来调用. # 其实这种表述并不明确,为什么不能被外部直接调用? # 因为,在类被定义的时候,带有双下滑线的属性,它的名字会自动发生改变: # 样式:_Classname__name # 所以,无法直接通过obj.__name访问到值;# 作用:防止子类创建的对象与基类创建的对象出现命名空间冲突的问题; # 单下划线,其实这种标

JS对象、包装类

JS对象.包装类 属性的增.删.改.查 增加属性:ojb.newProp = "what"; 删除属性:delete ojb.Prop 对象的创建方法 var obj = {} plainObject 对象字面量/对象直接量 构造函数 1)系统自带的构造函数 new Object() 2)自定义构造函数. 构造函数结构上和函数没有任何区别: java function person(name,sge){ //this = {}; this.name = name;//属性 this.a

JS对象的重点

*************Js对象的重点*****************************************************Js对象中的属性的' '可加可不加***可是如果是带有特殊字符的 ***必须加*** 比如**made-in-China***** ********************举一个栗子:var photo{ size:12,}*************************photo.size 等效于 photo['size'] 在js对象的遍历中fo

基于js对象,操作属性、方法详解

一,概述 在Java语言中,我们可以定义自己的类,并根据这些类创建对象来使用,在Javascript中,我们也可以定义自己的类,例如定义User类.Hashtable类等等. 目前在Javascript中,已经存在一些标准的类,例如Date.Array.RegExp.String.Math.Number等等,这为我们编程提供了许多方便.但对于复杂的客户端程序而言,这些还远远不够. 与Java不同,Java2提供给我们的标准类很多,基本上满足了我们的编程需求,但是Javascript提供的标准类很

js对象-属性遍历

为了加强js对象的认知,又刷了一题. 直接上题目: 找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)1.返回数组,格式为 key: value2.结果数组不要求顺序 示例: //输入 var C = function() {this.foo = 'bar'; this.baz = 'bim';}; C.prototype.bop = 'bip'; iterate(new C()); //输出 ["foo: bar", "baz: bim&quo

JS对象属性中get/set与getter/setter是什么

在js属性描述符这部分有几个较难理解的名词概念,本文旨在描述对它们的理解,主要包括:[[Get]]/[[Put]].get/set.getter/setter几个概念的阐述,数据属性和访问器属性. 属性 首先我们要搞清楚属性的概念,属性是存储在特定命名位置的值,是对象的内容,属性并不直接存储在对象容器内部.属性有两种类型:数据属性和访问器属性.属性具备了属性描述符,用来描述属性拥有的特性. 属性描述符 属性描述符用来描述属性特性的(只有在内部才能用的特性),配置属性是否可读,是否可写,是否可枚举