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 相关文章推荐
js类中的公有变量和私有变量
Jul 24 Javascript
JavaScript DOM学习第一章 W3C DOM简介
Feb 19 Javascript
chrome下img加载对height()的影响示例探讨
May 26 Javascript
微信小程序 textarea 详解及简单使用方法
Dec 05 Javascript
Bootstrap入门教程一Hello Bootstrap初识
Mar 02 Javascript
基于vue的fullpage.js单页滚动插件
Mar 20 Javascript
详解webpack+gulp实现自动构建部署
Jun 29 Javascript
npm的lock机制解析
Jun 20 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
Jul 19 Javascript
VUE的history模式下除了index外其他路由404报错解决办法
Aug 21 Javascript
vue data恢复初始化数据的实现方法
Oct 31 Javascript
Javascript柯里化实现原理及作用解析
Oct 22 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+javascript制作带提示的验证码源码分享
2014/05/28 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
使用PHP生成PDF方法详解
2015/01/23 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
2015/02/12 PHP
php计算多个集合的笛卡尔积实例详解
2017/02/16 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
Jquery中Ajax 缓存带来的影响的解决方法
2011/05/19 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
详解JS-- 浮点数运算处理
2016/11/28 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
利用node 判断打开的是文件 还是 文件夹的实例
2019/06/10 Javascript
在Vue mounted方法中使用data变量详解
2019/11/05 Javascript
Vue打包部署到Nginx时,css样式不生效的解决方式
2020/08/03 Javascript
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
Python实现的异步代理爬虫及代理池
2017/03/17 Python
快速了解python leveldb
2018/01/18 Python
python在非root权限下的安装方法
2018/01/23 Python
全面分析Python的优点和缺点
2018/02/07 Python
Python API自动化框架总结
2019/11/12 Python
浅谈pytorch、cuda、python的版本对齐问题
2020/01/15 Python
python字符串常用方法及文件简单读写的操作方法
2020/03/04 Python
Python数据可视化实现多种图例代码详解
2020/07/14 Python
Anaconda使用IDLE的实现示例
2020/09/23 Python
python如何利用Mitmproxy抓包
2020/10/10 Python
如何在windows下安装配置python工具Ulipad
2020/10/27 Python
pycharm 如何取消连按两下shift出现的全局搜索
2021/01/15 Python
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
小组口号大全
2014/06/09 职场文书
2015年母亲节活动总结
2015/02/10 职场文书
党支部半年考察意见
2015/06/01 职场文书
安全第一课观后感
2015/06/18 职场文书
网络研修随笔感言
2015/11/18 职场文书
中秋节英文祝福语句(14句)
2019/09/11 职场文书
详解Python函数print用法
2021/06/18 Python
MySQL 原理优化之Group By的优化技巧
2022/08/14 MySQL