码农武:JavaScript对象

1.对象:Object

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数... 此外,JavaScript 允许自定义对象。

所有事物都是对象

avaScript 提供多个内建对象,比如 String、Date、Array 等等。 对象只是

带有属性和方法的特殊数据类型。

. 布尔型可以是一个对象。

. 数字型可以是一个对象。

. 字符串也可以是一个对象

. 日期是一个对象

. 数学和正则表达式也是对象

. 数组是一个对象

. 甚至函数也可以是对象

对象只是一种特殊的数据。对象拥有属性和方法。

2. 创建对象

通过 JavaScript,您能够定义并创建自己的对象。

创建新对象有不同的方法:

  • json 模式创建对象:

  • 直接实例化方式,通过构造函数 new Object()创建对象;

  • 创建直接的实例

    这个例子创建了对象的一个新实例,并向其添加了四个属性:

替代语法(使用对象 literals):

3.操作对象

对象最常见的用法是创建(create)、设置(set)、查找(query)、 删除(delete)、检测(test)和枚举(enumerate)它的属性

1. 访问对象属性

读取对象的属性,有两种方法,一种是使用点运算符,还有一种 是使用方括号运算符。

语法:对象.属性名

注意:数值键名(特殊属性名)不能使用点运算符(因为会被当成 小数点),只能使用方括号运算符。

2. 对象添加属性

语法:对象.属性名=新增值;

Object.defineProperty () 方法会直接在一个对象上定义一个新 属性,或者修改一个对象的现有属性,并返回此对象。

备注:应当直接在 Object 构造器对象上调用此方法,而不是 在任意一个 Object 类型的实例上调用。

3. 对象属性修改

语法:对象.属性名=新增值;

4.对象属性删除

语法:delete 对象.属性名;

注意:delete 运算符只能删除自有属性,不能删除继承属性。删 除一个不存在的属性,delete 不报错,而且返回 true。 只有一 种情况,delete 命令会返回 false,那就是该属性存在,且不得 删除

5 检测对象所有属性

查看一个对象本身的所有属性,可以使用 Object.keys 方法,返回一个 数组。

6 检测对象是否有此属性

in 运算符左侧是属性名(字符串),右侧是对象。如果对象的自 有属性或继承属性中包含这个属性就返回 true。

用“ !== ”来判断一个属性是否是 undefined

hasOwnPreper ty ()方法

propertyIsEnumerable()方法

属性特性

o 可写(writable attribute):可设置该属性的值。

o 可枚举(enumerable attribute):可通过 for/in 循环返回 该属性。

o 可配置(configurable attribute):可删除或修改属性。

7 查看所有属性

查看一个对象本身的所有属性,可以使用 Object.keys 方法,返回一个 数组。

Console.log (Object.keys(o)); //[name]

4. 内存问题

1) Js 中的变量都是保存在栈内存中存储,值与值之间都是相互独立的修改

某个变量不会影响到之前复制过他的变量;

2) Js 中的对象是保存在堆内存中的,每创建一个新的对象就会在堆内存中 开辟内存空间,而变量保存的是内存地址(对象的引用),当通过一个变量修改内部属性时,复制或者引用的变量也会被影响。

5.遍历对象

JavaScript for...in 语句循环遍历对象的属性。 语法

注意: for...in 循环中的代码块将针对每个属性执行一次。

实例:

循环遍历对象的属性:

6.原型

JavaScript 是面向对象的语言,但 JavaScript 不使用类。

在 JavaScript 中,不会创建类,也不会通过类来创建对象(就像在其他面向对 象的语言中那样)。

JavaScript 基于 prototype,而不是基于类的。

每一个 JavaScript 对象(null 除外)都和另一个对象相关联,也可以说,继承另 一个对象。另一个对象就是我们熟知的“原型 ”(prototype),每一个对象都从 原型继承属性。

只有 null 除外,它没有自己的原型对象。

1、构造函数

构造函数,是用来生成“对象 ”的函数。一个构造函数可生成多个对象,这些对象都有相同的结构。

构造函数的特点:

构造函数名字的第一个字母通常大写。

比如:通过 new Object()创建的对象继承自 Object.prototype;

通过 new Array ()创建的对象的原型就是 Array.prototype

通过 new 关键字方法创建具体对象时,this 才有了具体的名字

构造函数也可以传入参数:

new 命令本身就可以执行构造函数,所以后面的构造函数可以带括号,也可以不带括号。

2、实例化对象

new 关键字会进行如下操作:

  1. 创建一个空的简单的javascript对象,(即{})

  2. 链接该对象(设置该对象的constructor)到另一个对象;

  3. 将步骤1新创建的对象作为this的上下午

  4. 如果该函数没有返回对象,则返回this

关于对象的constructor,参见object.prototype.constructor

3.原型链

对象的属性和方法,有可能是定义在自身,也有可能是定义在它的原 型对象。由于原型本身也是对象,又有自己的原型,所以形成了一条

原型链(prototype chain)。

如果一层层地上溯,所有对象的原型最终都可以上溯到Object.prototype,即 Object 构造函数的 prototype 属性指向的那个对象。那么,Object.prototype 对象有没有它的原型呢?回答可以是有的,就是没有任何属性和方法的null对象,而null对象没有自己的原型。

4、继承

JavaScript 对象具有“ 自有属性 ”,也有一些属性是从原型对象继承而来的。

当查询一个不存在的属性时,JavaScript 不会报错,返回 undefined。 如果对象自身和它的原型,都定义了一个同名属性,那么优先读取对象自身的属性,这叫做“覆盖 ”(overiding)。

5、con tructor 属性

prototype 对象有一个 constructor 属性,默认指向 prototype 对象所在的构造函数

  • 27
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码农武

请付给老农种子化肥钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值