Javascript Objects详解


Posted in Javascript onSeptember 04, 2014

创建对象

 •对象直接量

var o = {
 foo : "bar"
 }

•构造函数

var o = new Object();

•原型继承

var p = Object.create(o);

类继承

Javascript对象拥有自有属性和继承属性。

 •在查询对象o的属性x时,先查找o中的属性x,如果没找到,则查找o的原型对象中的x属性,直到查找到x或者一个原型是null的对象为止

 •在给对象o的x属性赋值时,如果o中已经有一个自有属性x,则改变x的值,若o中不存在属性x,则为o创建一个x属性并赋值

 •也就是说,只有在查询时原型链才会起作用。

var O = {
 x : 1
 };
function P() {
 this.y = 2;
 }
P.prototype = O;
var t = new P();
 console.log(t);
 console.log('x' in t);//true
 console.log(t.hasOwnProperty('x'));//false

可以使用in 或者 hasOwnProperty 来判断对象中是否存在属性。

对象属性

 •遍历对象属性
 
可以使用 for..in 来遍历对象的属性

使用for..in时会遍历到原型链上的属性。遍历顺序是以广度优先遍历

所以使用hasOwnProperty便可以判断是否是对象自有的属性。

 •对象属性的特性
 
使用Object.getOwnPropertyDescriptor()获取对象特定属性的描述符

可写性(writable) 表示对象属性是否可写

例如

var o = {
  foo : 'bar'
}
Object.defineProperty(o, "foo", { writable : false });
o.foo = 'world';
console.log(o.foo);//仍然输出bar

 可枚举性(enumerable) 表示对象属性是否可枚举

例如
 Array中的length等属性的 enumerable是false,所以,

for (p in Array) {
  console.log(p);
}

 什么也不输出

可配置性(configurable) 表示可否修改属性的可配置性和可枚举性

可以用Object.defineProperties来定义这些配置属性。
Object.defineProperty(o, "foo", { writable : false });

 Get 表示获取对象属性的方法
Set 表示设置对象属性的方法

示例

var book = {
  _year: 2004,
  edition: 1
};
Object.defineProperty(book, "year", {
  get: function () {
    console.log('get year');
    return this._year;
  },
  set: function (newValue) {
    console.log('set year');
    if (newValue > 2004) {
      this._year = newValue;
      this.edition += newValue - 2004;
    }
  }
});
book.year = 2005;//控制台输出‘set year'
console.log(book.year);//控制台输出‘get year'和year的值

 对象方法

toString 将对象转换成字符串,默认的转换会是[object Object]之类的东西,所以需要转成json格式的话可以用JSON.stringify

valueOf 需要将对象转换成其他类型的时候要用到。同样的,默认转换没什么值得说的。
 
可执行对象

通过如下方法可以创建一个可执行对象

function bar(o) {
  var f = function() { return "Hello World!"; }
  o.__proto__ = f.__proto__;
  f.__proto__ = o;
  return f;
}
var o = { x: 5 };
var foo = bar(o);
console.log(foo());
console.log(foo.x);
console.log(typeof foo);//function

 既可以当作对象来使用(有原型链),也可以当作函数来直接调用

Javascript 相关文章推荐
IE和Mozilla的兼容性汇总event
Aug 12 Javascript
JavaScript null和undefined区别分析
Oct 14 Javascript
jQuery中:first选择器用法实例
Dec 30 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
Feb 28 Javascript
Javascript数据结构与算法之列表详解
Mar 12 Javascript
分析js闭包引起的事件注册问题
Mar 29 Javascript
微信小程序 animation API详解及实例代码
Oct 08 Javascript
简单实现js悬浮导航效果
Feb 05 Javascript
详解Angular CLI + Electron 开发环境搭建
Jul 20 Javascript
详解React开发必不可少的eslint配置
Feb 05 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
May 21 Javascript
swiper4实现移动端导航切换
Oct 16 Javascript
加随机数引入脚本不让浏览器读取缓存
Sep 04 #Javascript
js不能获取隐藏的div的宽度只能先显示后获取
Sep 04 #Javascript
点击A元素触发B元素的事件在IE8下会识别成A元素
Sep 04 #Javascript
Flexigrid在IE下不显示数据的有效处理方法
Sep 04 #Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Sep 04 #Javascript
告诉你什么是javascript的回调函数
Sep 04 #Javascript
jquery学习总结(超级详细)
Sep 04 #Javascript
You might like
PHP通过内置函数memory_get_usage()获取内存使用情况
2014/11/20 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
一个js封装的不错的选项卡效果代码
2008/02/15 Javascript
select组合框option的捕捉实例代码
2008/09/30 Javascript
20款超赞的jQuery插件 Web开发人员必备
2011/02/26 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
javascript编码的几个方法详细介绍
2013/01/06 Javascript
解决jQuery动态获取手机屏幕高和宽的问题
2014/05/07 Javascript
Jquery焦点图实例代码
2014/11/25 Javascript
深入分析jquery解析json数据
2014/12/09 Javascript
jQuery实现可展开合拢的手风琴面板菜单
2015/09/15 Javascript
nodejs 实现钉钉ISV接入的加密解密方法
2017/01/16 NodeJs
AngularJS报错$apply already in progress的解决方法分析
2017/01/30 Javascript
移动前端图片压缩上传的实例
2017/12/06 Javascript
Angular中点击li标签实现更改颜色的核心代码
2017/12/08 Javascript
简单理解Vue中的nextTick方法
2018/01/30 Javascript
layer弹出层父子页面事件相互调用方法
2018/08/17 Javascript
对layer弹出框中icon数字参数的说明介绍
2019/09/04 Javascript
浅谈layer的Icon样式以及一些常用的layer窗口使用方法
2019/09/11 Javascript
Vue3为什么这么快
2020/09/23 Javascript
[01:16]DOTA2小知识课堂 Ep.03 芒果树无伤肉山
2019/12/05 DOTA
Python中用于返回绝对值的abs()方法
2015/05/14 Python
python 异常处理总结
2016/10/18 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
python批量实现Word文件转换为PDF文件
2018/03/15 Python
浅谈python中requests模块导入的问题
2018/05/18 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
python中常见错误及解决方法
2020/06/21 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
美国儿童玩具、装扮和玩偶商店:Magic Cabin
2018/09/02 全球购物
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
客户接待方案
2014/02/26 职场文书
校园环保标语
2014/06/13 职场文书
商务专员岗位职责范本
2014/06/29 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
驾驶员安全责任书
2014/07/22 职场文书