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 获取浏览器高度和宽度值(多浏览器)
Sep 02 Javascript
javascript下利用arguments实现string.format函数
Aug 24 Javascript
javascript分页代码实例分享(js分页)
Dec 13 Javascript
jquery通过select列表选择框对表格数据进行过滤示例
May 07 Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 Javascript
Bootstrap入门书籍之(三)栅格系统
Feb 17 Javascript
JavaScript判断浏览器对CSS3属性是否支持的多种方法
Nov 13 Javascript
Vuex2.0+Vue2.0构建备忘录应用实践
Nov 30 Javascript
Vue的百度地图插件尝试使用
Sep 06 Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 jQuery
Vue实现侧边菜单栏手风琴效果实例代码
May 31 Javascript
利用JS如何获取form表单数据
Dec 19 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+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php读取qqwry.dat ip地址定位文件的类实例代码
2016/11/15 PHP
JQuery SELECT单选模拟jQuery.select.js
2009/11/12 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
深入理解JSON数据源格式
2014/01/10 Javascript
你所未知的3种Node.js代码优化方式
2016/02/25 Javascript
jquery插件jquery.dragscale.js实现拖拽改变元素大小的方法(附demo源码下载)
2016/02/25 Javascript
基于Jquery插件Uploadify实现实时显示进度条上传图片
2020/03/26 Javascript
不间断循环滚动效果的实例代码(必看篇)
2016/10/08 Javascript
Asp.Net之JS生成分页条的方法
2016/11/23 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
浅谈Javascript中的Label语句
2016/12/14 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
详解vue中computed 和 watch的异同
2017/06/30 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
利用JavaScript为句子加标题的3种方法示例
2021/01/05 Javascript
[55:16]Mski vs VGJ.S Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
批处理与python代码混合编程的方法
2016/05/19 Python
python中数据爬虫requests库使用方法详解
2018/02/11 Python
Python实现计算圆周率π的值到任意位的方法示例
2018/05/08 Python
python3.6数独问题的解决
2019/01/21 Python
python开发游戏的前期准备
2019/05/05 Python
Series和DataFrame使用简单入门
2019/11/13 Python
Python PyQt5运行程序把输出信息展示到GUI图形界面上
2020/04/27 Python
python + selenium 刷B站播放量的实例代码
2020/06/12 Python
CSS3动画animation实现云彩向左滚动
2014/05/09 HTML / CSS
捷克玩具商店:Bambule
2019/02/23 全球购物
副总经理岗位职责
2014/03/16 职场文书
政治表现评语
2014/05/04 职场文书
勤奋学习演讲稿
2014/05/10 职场文书
卖车协议书范例
2014/09/16 职场文书
80后婚前协议书范本
2014/10/24 职场文书
Python实现批量自动整理文件
2022/03/16 Python