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 相关文章推荐
什么是JavaScript
Aug 13 Javascript
javascript四舍五入函数代码分享(保留后几位)
Dec 10 Javascript
JavaScript 经典实例日常收集整理(常用经典)
Mar 30 Javascript
jQuery中借助deferred来请求及判断AJAX加载的实例讲解
May 24 Javascript
JavaScript获取IP获取的是IPV6 如何校验
Jun 12 Javascript
详解Sea.js中Module.exports和exports的区别
Feb 12 Javascript
Vue 2.5 Level E 发布了: 新功能特性一览
Oct 24 Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 Javascript
详解Vue中localstorage和sessionstorage的使用
Dec 22 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
Mar 17 Javascript
Webpack5正式发布,有哪些新特性
Oct 12 Javascript
JS实现页面炫酷的时钟特效示例
Aug 14 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
图书管理程序(一)
2006/10/09 PHP
自己的js工具 Cookie 封装
2009/08/21 Javascript
javascript修改图片src的方法
2015/01/27 Javascript
JavaScript 封装一个tab效果源码分享
2015/09/15 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
2016/06/01 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
2016/06/06 Javascript
indexedDB bootstrap angularjs之 MVC DOMO (应用示例)
2016/06/20 Javascript
AngularJs篇:使用AngularJs打造一个简易权限系统的实现代码
2016/12/26 Javascript
基于ExtJs在页面上window再调用Window的事件处理方法
2017/07/26 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
从理论角度讨论JavaScript闭包
2019/04/03 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
浅谈vuex中store的命名空间
2019/11/08 Javascript
vue随机验证码组件的封装实现
2020/02/19 Javascript
Vue实现简单的拖拽效果
2020/08/25 Javascript
vue cli 3.0通用打包配置代码,不分一二级目录
2020/09/02 Javascript
python实现的文件同步服务器实例
2015/06/02 Python
深入解答关于Python的11道基本面试题
2017/04/01 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
python requests抓取one推送文字和图片代码实例
2019/11/04 Python
Pycharm+Python工程,引用子模块的实现
2020/03/09 Python
Python文件操作基础流程解析
2020/03/19 Python
html5之Canvas路径绘图、坐标变换应用实例
2012/12/26 HTML / CSS
一套VC试题
2015/01/23 面试题
实体的生命周期
2013/08/31 面试题
七一表彰活动方案
2014/01/18 职场文书
新年团拜会主持词
2014/04/02 职场文书
室内设计专业毕业生求职信
2014/05/02 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
保证金退回承诺函格式
2015/01/21 职场文书
长城导游词
2015/01/30 职场文书
高温慰问简报
2015/07/21 职场文书
Django 如何实现文件上传下载
2021/04/08 Python
Python Django / Flask如何使用Elasticsearch
2022/04/19 Python