面向对象精要-理解对象

转载 2018年04月16日 23:41:58

1、创建对象

创建对象的两种方法:

使用Object构造函数

var person2 = new Object();
person2.name="Qian";

使用对象的字面形式

var person1={
    name:"Qian"
};

对象添加以及修改时JavaScript会在对象上调用[[Put]][[Set]]方法

2、属性探测

2.1、使用“in”操作符

console.log("name" in person1)/*true*/

2.2、使用“hasOwnProperty()”方法

console.log(person1.hasOwnProperty("name"))/*true*/

3、删除属性

var person1={
    name:"Qian"
};
delete person1.name;
console.log(person1.hasOwnProperty("name"))/*false*/

 

 

 4、枚举属性

 for-in:可枚举属性的内部特征都被设置为true,for-in循环会枚举一个对象所有的可没经验属性并将属性名赋给一个变量

复制代码
var person1 = {
    name:"Qian",
    age:12
}
for(var item in person1){
    console.log(item)/*name    age*/
}
复制代码

Object.keys():获取一个对象的属性列表已备程序使用

复制代码
var person1 = {
    name:"Qian",
    age:12
};
var properties = Object.keys(person1);
for(var i=0;i<properties.length;i++){
    console.log(i)
}
复制代码

5、属性类型

数据属性:包含一个

访问器属性:包含一个函数

6、属性特征

通用特征:

是否可遍历:[[Enumerable]]

是否可配置:[[Configurable]]---------->可以用delete删除

修改属性特征:Object.defineProperty()方法

例:修改某个对象属性使其变成不可以枚举且不可配置

Object.defineProperty(person1,"name",{
    enumerable:false,
    configurable:false
});
console.log(person1.propertyIsEnumerable("name"))/*false*/

数据属性特征:

[[Value]]:创建对象时该特征自动赋值

[[Writable]]:布尔值,默认可以写

定义完整的数据属性:Object.defineProperty()

复制代码
var person1 = {}
Object.defineProperty(person1,"name",{
    value:"Qian",
    enumerable:true,
    configurable:true,
    writable:true
})
复制代码

访问器属性特征:

[[Get]]

[[Set]]

定义多重属性

Object.defieProperties()方法

复制代码
var person1 = {}
Object.defineProperties(person1, {
    _name:{
        value: "Qian",
        enumerable: true,
        configurable: true,
        writable: true
    },
    name:{
        get:function () {
            console.log("Reading me")
        }
    }
})
复制代码

获取属性特征:

Object.getOwnPropertyDescriptor()方法

var person1 = {
    name:"Qian"
}
var deseciptor = Object.getOwnPropertyDescriptor(person1,"name");
console.log(deseciptor.enumerable)/*true*/

7、禁止修改对象

[[Extensible]]:布尔值,设置为false,禁止新属性的添加

7.1、禁止扩展

方法:使用Object.preventExtensions()

检测方法:使用Object.isExtensible()

var person1 = {
    name:"Qian"
}
Object.preventExtensions(person1);
console.log(Object.isExtensible(person1))/*false*/

7.2、封印对象

方法:Object.seal()

检测方法:使用Object.isSealed()

var person1 = {
    name:"Qian"
};
Object.seal(person1);
console.log(Object.isSealed(person1))/*true*/

7.3、冻结对象

方法:Object.freeze()

检测方法:Object.isFrozen()

var person1 = {
    name:"Qian"
};
Object.freeze(person1);
console.log(Object.isFrozen(person1))/*true*/

总结:

1、将属性视为键值对,对象视为属性的哈希表有助于理解JavaScript对象。

2、你可以用点好或者中括号访问对象的属性

3、用in操作符检测某个属性是否存在

4、属性的两种类型:数据属性和访问器属性

5、属性的特征

6、锁定对象的3中方式

http://www.ube1531.cn/
http://www.qnu9925.cn/
http://www.hxl6493.cn/
http://www.ric5056.cn/
http://www.ibs2142.cn/
http://www.mco2769.cn/
http://www.tzr5175.cn/
http://www.vsb9575.cn/
http://www.eho1460.cn/
http://www.dyy3200.cn/
http://www.tdw5546.cn/
http://www.mtj9347.cn/
http://www.osi0013.cn/
http://www.bjb5476.cn/
http://www.ghk5310.cn/
http://www.xjy3902.cn/
http://www.grp2563.cn/
http://www.lkg4662.cn/
http://www.vwb8311.cn/
http://www.mmw6064.cn/
http://www.cqz7056.cn/
http://www.nlk4583.cn/
http://www.adw2245.cn/
http://www.alj9141.cn/
http://www.vdf1425.cn/
http://www.miv2453.cn/
http://www.vdx0926.cn/
http://www.smc5776.cn/
http://www.ffn3573.cn/
http://www.rdj9135.cn/
http://www.mtu9335.cn/
http://www.gzv8338.cn/
http://www.xum5501.cn/
http://www.jiq1934.cn/
http://www.syh5891.cn/
http://www.yvr8830.cn/
http://www.aua2439.cn/
http://www.ath0401.cn/
http://www.gmx2930.cn/
http://www.pzf7790.cn/
http://www.ass0795.cn/
http://www.mox2684.cn/
http://www.oqc1977.cn/
http://www.bcu6005.cn/
http://www.ajj5951.cn/
http://www.xwt5617.cn/
http://www.rlv0165.cn/
http://www.shg1037.cn/
http://www.akj0836.cn/
http://www.ipc6507.cn/
http://www.kri6555.cn/
http://www.mzj8672.cn/
http://www.azq7227.cn/
http://www.zce9839.cn/
http://www.gjc9646.cn/
http://www.myo1179.cn/
http://www.ogr7085.cn/
http://www.bah1564.cn/

JavaScript面向对象精要(一)

传统面向对象的语言几大特征:封装、继承、多态,在JavaScript中并不适用。JavaScript的弱类型特征允许你用比其他语言更少的代码完成同样的任务。无需提前设计好类再进行编码。需要一个具有某个...
  • ligang2585116
  • ligang2585116
  • 2017-01-08 15:16:50
  • 3360

《JavaScript面向对象精要》

这本书应该是 14 年(或15年)买的,那时人比较傻,看不明白,匆匆看了几十页就束之高阁了,但是一有点很确定,这是本好书。今天终于来到了这里,感觉过了一道坎。引用类型就是对象,对象就是引用类型类型分原...
  • wozaixiaoximen
  • wozaixiaoximen
  • 2017-01-08 15:34:49
  • 551

面向对象JavaScript精要(英文原版pdf)

  • 2017年02月10日 14:16
  • 2.06MB
  • 下载

读《JavaScript 面向对象精要》和《JavaScript 启示录》精华总结

导读:本文详细总结了JavaScript 面向对象基础的知识点,主要来自《JavaScript 面向对象精要》《JavaScript 启示录》这两本书,推荐给各位做做开发的朋友。 目...
  • csyuyaoxiadn
  • csyuyaoxiadn
  • 2016-09-07 14:36:17
  • 565

JavaScript面向对象精要(二)

四、构造函数和原型对象1. 构造函数构造函数就是用new创建对象时调用的函数。使用构造函数的好处在于所有用同一个构造函数创建的对象都具有同样的属性和方法。function Person(){} var...
  • ligang2585116
  • ligang2585116
  • 2017-01-08 19:02:21
  • 2509

javascript中的面向对象理解(一)

一、注意:提到“面向对象”这一概念,众所周知,javascript中的面向对象思想与其他的编程语言(例如:PHP、Java等)是有着很大区别的。因此,我们先复习下,传统意义上,面向对象的相关概念,以便...
  • u014516981
  • u014516981
  • 2016-10-19 23:48:23
  • 2531

理解什么是的面向对象设计

自学前端快一年了,期间一直都想写博客,但因为个人水平有限,所以一直没敢写,今天终于鼓起勇气尝试决定写一篇博文。向大家分享一下我的学习心得。因为是第一次写,所以有什么不当之处请大家多多包涵,并给予指正。...
  • qq_36276528
  • qq_36276528
  • 2017-03-31 22:46:20
  • 1242

如何理解面向对象思想

我们学习JAVA语言必须要掌握对象和类,这样的话就可以更深层次的理解JAVA这种面向对象的程序开发理念,从而更好更快  地掌握JAVA的变成思想和方法。掌握类和对象是JAVA语言变成的基础。那么,...
  • LK764265808
  • LK764265808
  • 2016-07-08 11:05:03
  • 7493

深入理解Java中的面向对象

深入理解Java中的面向对象
  • a2011480169
  • a2011480169
  • 2016-08-03 09:13:10
  • 6760
收藏助手
不良信息举报
您举报文章:面向对象精要-理解对象
举报原因:
原因补充:

(最多只允许输入30个字)