1.对象的分类

  • 内置对象:由ECMAScript规范定义的对象或类
  • 宿主对线:由浏览器定义的对象
  • 自定义对象:由运行中的Javascript代码创建的对象

2.属性的分类

  • 自有属性:直接在对象中定义的属性
  • 继承属性:来自对象的原型对象中定义的属性

3.创建对象的方式

  • 对象直接量
  • 通过new创建对象
  • 通过Object.create()创建对象(ECMAScript5),示例代码如下
// 创建一个以普通对象为原型的对象
var o1 = Object.create({x:1,y:2});
// 创建一个没有原型的对线
var o2 = Object.create(null);
// 创建以Object.prototype为原型的对象
var o3 = Object.create(Object.prototype);
// 创建带属性x,y的对象
var o4 = Object.create(object.prototype,{
x: {value:1, configurable:true, enumerable:true, writable:true},
y: {value:2, configurable:true, enumerable:true, writable:true}
});

  

4.检测对象是否拥有某属性

// in运算符,检测对象所有(包括继承)属性,IE只有当可枚举属性时才返回true
var o = {x:1};
'x' in o; //true
'y' in o; //false
'toString' in o //true // o.hasOwnProperty(),检测对象的所有自有属性(不管是否可枚举)
o.hasOwnProperty('x'); //true
o.hasOwnProperty('toString'); //false // o.propertyIsEnumerable(),检测对象的所有可枚举自有属性
o.propertyIsEnumerable('x'); //true
Object.prototype.propertyIsEnumerable('toString') //false

  

5.枚举对象的属性

  • for/in : 可枚举对象所有的(包括继承)的所有可枚举属性
  • Object.keys() : 可枚举对象自有属性中的可枚举属性
  • Object.getOwnPropertyNames() : 可枚举对象自有属性中的所有属性(包括不可枚举的属性,但仅E5有效,E3没有任何办法获取对象的不可枚举属性)

6.属性的特性

数据属性的4个特性:值(value)、可写性(writable)、可枚举性(enumerable)和可配置性(configurable)

存取器属性的4个特性:读取(get)、写入(set)、可枚举性(enumerable)和可配置性(configurable)

// 调用Object.getOwnPropertyDescriptor()可以查看自有属性的特性
// 返回 {value:1, writable:true, enumerable:true, configurable:true}
Object.getOwnPropertyDescriptor({x:1},'x');
// 返回undefined
Object.getOwnPropertyDescriptor({}, 'x'); 设置属性的特性用Object.defineProperty()或Object.defineProperties(),如:
var o = {};
Object.defineProperty(o,'x',{value:1, writable:true, enumerable:true, configurable:true}); //这个函数没有返回值 var p = Object.defineProperties({}, {
x: {value:1, writable:true, enumerable:true, configurable:true},
y: {get: function(){}, enumerable:true, configurable:true}
});

  注:如果属性是不可配置的,则不可以修改属性的可枚举性和可配置性,可写性只能从true改成false。

7.对象的三个属性

查看原型属性

// ECMAScript5
var o = {};
console.dir(Object.getPrototypeOf(o)); //Object.prototype对象 // ECMAScript3
console.dir(o.constructor.prototype); //这个方法并不可靠,o.constructor是创建这个对象的构造函数 // 判断一个对象是否是另一个对象原型,这个函数的功能非常像instanceOf
var p = {x:1};
var o = Object.create(p);
p.isPrototypeOf(o); //true
Object.prototype.isPrototypeOf(o); //true

  

查看对象的类

function classof(o) {
if(o === null) return "Null";
if(o === undefined) return "Undefined";
//使用下面这条无法区分通过构造函数创建的对象
//return Object.prototype.toString.call(o).slice(8,-1);
//本人自己的想法
return o.constructor.name;
}

  

可扩展性

// 使用Object.isExtensible()判断对象是否可扩展
// 使用Object.preventExtensions(),将对象转为不可扩展,一旦转成不可扩展的对象不能转换回可扩展。
// 使用Object.seal()将对象转为不可扩展,且所有自有属性都设置成不可配置,可通过Object.isSealed()来检测对象是否封闭。
// 使用Object.freeze()将对象冻结,除了具备seal的功能外还把属性设置成只读,可通过Object.isFrozen()来检测对象是否冻结

  

8.序列化对象

// JSON.stringify(o)将对象o转化为字符串
// JSON.parse(o)将对象字符串o转化为对象

  

JavaScript基本概念(对象)的更多相关文章

  1. JavaScript之面向对象的概念,对象属性和对象属性的特性简介

    一.大家都知道,面向对象语言有一个标志,那就是他们都有类的概念,通过类我们可以创建任意多个具有相同属性和方法的对象.但ECMAScript(指定JavaScript标准的机构,也就是说JavaScri ...

  2. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

  3. 全面理解Javascript中Function对象的属性和方法

    http://www.cnblogs.com/liontone/p/3970420.html 函数是 JavaScript 中的基本数据类型,在函数这个对象上定义了一些属性和方法,下面我们逐一来介绍这 ...

  4. JavaScript基本概念(二)

    JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...

  5. 《JavaScript核心概念》基础部分重点摘录

    注:<JavaScript核心概念>适合深入了解JavaScript,比我买的<JavaScript框架设计>语言和内容丰富多了(可能是我水平尚浅吧). 1. 作用域 var ...

  6. 第一百一十三节,JavaScript文档对象,DOM基础

    JavaScript文档对象,DOM基础 学习要点: 1.DOM介绍 2.查找元素 3.DOM节点 4.节点操作 DOM(Document Object Model)即文档对象模型,针对HTML和XM ...

  7. 基于类(Java)和基于原理(JavaScript)的对象系统的比较

    Java:面向对象编程语言,吸收了C++语言的各种优点,丢掉了C++让人头疼的多继承.指针等概念.具有功能强大和简单易用的两大特征.Java具有简单性.面向对象.分布式.健壮性.安全性.平台独立与可移 ...

  8. 第四章 JavaScript操作DOM对象

    第四章   JavaScript操作DOM对象 一.DOM操作 DOM是Document Object Model的缩写,即文档对象模型,是基于文档编程的一套API接口,1988年,W3C发布了第一级 ...

  9. JavaScript之ECMA对象的学习

    从传统意义上来说,ECMAScript 并不真正具有类.事实上,除了说明不存在类,在 ECMA-262 中根本没有出现“类”这个词.ECMAScript 定义了“对象定义”,逻辑上等价于其他程序设计语 ...

  10. Javascript中的对象和原型(一)(转载)

    面向对象的语言(如Java)中有类的概念,而通过类可以创建任意多个具有相同属性和方法的对象.但是,JavaScript 没有类的概念,因此它的对象也与基于类的语言中的对象有所不同. 要了解面向对象,首 ...

随机推荐

  1. C++标准库之泛型算法

    本文中算法都是指泛型算法. 基本要点: 1)算法使用迭代器进行操作. 2)不依赖容器,但容器希望使用算法,就必须提供接口. 3)通用算法永远不会执行容器操作.操作仅指:更改容器大小的操作.但,容器内部 ...

  2. SQLServer 2012 可视化窗口中,设置“时间”默认值为“当前时间"

    最近,需要在SQLServer 2012中,设置datetime的默认值为当前时间. 通过可视化窗口进行设置,而不是将getdate()函数写在sql语句中,也不是将‘2022-2-2 22:22:2 ...

  3. 复习篇(一)Activity的生命周期和启动模式

    (一)关于<intent-filter>中的<data> 当设置<data>过滤器的时候,使用intent的时候必须要设置响应的匹配,否则无法匹配成功.不过不设置则 ...

  4. Flask把变量注册到模板中

    使用python的Flask框架时,参考<Flask Web开发>一书时,发现书中可以在全局使用Permission.FOLLOW变量. 但是自己在尝试是,确提示变量没有定义.经过搜索,找 ...

  5. Leetcode算法刷题:第14题 Longest Common Prefix

    Longest Common Prefix 题目 给予一个列表,元素为字符串,写一个程序找出最长公共前缀 解题思路 先比较两个字符串,如果第一个字符不一样,则返回空值,比较完成后,用这个公共字符串和下 ...

  6. Holding Bin-Laden Captive!(hdoj1085)代码并未完全看懂

    We all know that Bin-Laden is a notorious terrorist, and he has disappeared for a long time. But rec ...

  7. python操作redis-hash

    #!/usr/bin/python #!coding: utf-8 import redis if __name__=="__main__": try: conn=redis.St ...

  8. js对象中什么是可枚举性(enumerable)?

    说到枚举,可能很多人都会想到枚举类型,但在javascript对象中有一个属性为可枚举性,他是什么呢? 概念 可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之 ...

  9. Geoserver基本使用、WMS服务发布与OpenLayers测试

    1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Ge ...

  10. CDOJ 631 敢说敢做 记忆化搜索and动规

    //跟沈爷学的 传送门http://www.cnblogs.com/Xiper/p/4639636.html #include<cstdio> #include<iostream&g ...