JavaScript可枚举的属性
/*
把P中的可枚举属性复制到o中,并返回o中
如果o和p中含有同名的属性,则覆盖O中的属性
这个函数并不处理getter和setter以及复制属性
*/
function extend(o,p){
for (prop in p){ //遍历p中的属性
o[prop] = p[prop]; //将属性添加至o中
}
return o;
} /*
*将p中的可枚举属性复制o中,并返回o
如果o和p中有同名的属性,o中的属性将不受影响
这个函数并不处理getter和setter以及复制属性
*/
function merge(o,p){
for(prop in p){ //遍历p中的所有属性
if (o.hasOwnProperty[prop]) continue;//过滤掉已经在o中存在的属性
o[prop] =p[prop]; //将属性添加至o中
}
return o;
}
/*
*如果o中的属性在P没有同名属性,则从o中删除这个属性
*返回o
*/
function restrict(o,p){
for (prop in o){ //遍历o中的所有属性
if(!(prop in p)) delete o[prop]; //如果在p中不存在,则删除之
}
return o;
} /*
*如果o中的属性在p中存在同名属性,则从o中删除这个属性
*返回o
*/
function subtract(o,p){
for(prop in o){ //遍历p中的所有属性
delete o[prop]; //从o中删除(删除一个不存在的属性不会报错)
}
return o;
}
/*
*返回一个新对象,这个对象同时拥有o的属性和p的属性
*如果o和p中有重名对象,使用p中的属性值
*/
function union(o,p){
return (extend(extend({},o),p);)
}
/*
返回一个新对象,这个对象拥有同时在o和p中出现的属性
很像求o和p的交集,但p中属性的值被忽略。
*/
function intersection(o,p){ return restrict(extend({},o),p); }
/*
返回一个数组,这个数组包含的是o中可枚举的自有属性的名字
*/
function keys(o){
if (typeof 0 !== "object") throw TypeError(); //参数必须是对象
var result = []; //将要返回的数组
for (var prop in o){ //遍历所有可枚举的属性
if(o.hasOwnProperty(prop)){ //判断是否是自有属性
result.push(prop); //将属性名添加至数组中
} }
return result; //返回这个数组
} /*ES5除了for/in 循环之外,定义了用以枚举属性名称的函数。
第一个是Object.keys(),返回一个数组。
第二个可枚举函数是Object.getOwnPropertyNames()
ES3中无法实现类似的函数,因为ES3中没有提供任何方法来获取对象的不可枚举属性
*/
JavaScript可枚举的属性的更多相关文章
- [Effective JavaScript 笔记]第47条:绝不要在Object.prototype中增加可枚举的属性
之前的几条都不断地重复着for...in循环,它便利好用,但又容易被原型污染.for...in循环最常见的用法是枚举字典中的元素.这里就是从侧面提出不要在共享的Object.prototype中增加可 ...
- JavaScript中对象的属性
在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的. 属性类型 JavaScript中有三种不同类型的属性:命名数据属性(named data properties) ...
- JavaScript 中的延迟加载属性模式
传统上,开发人员在 JavaScript 类中为实例中可能需要的任何数据创建属性.对于在构造函数中随时可用的小块数据来说,这不是问题.但是,如果在实例中可用之前需要计算某些数据,您可能不想预先支付该费 ...
- 借助JavaScript中的Dom属性改变Html中Table边框的颜色
借助JavaScript中的Dom属性改变Html中Table边框的颜色 -------------------- <html> <head> <title>我是页 ...
- Javascript常用对象的属性和方法
javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算 ...
- JavaScript 数组方法和属性
一. 数组对象的操作方法 1. 数组的创建 2.prototype属性 返回对象原型的引用,prototype属性时object共有的. objectName.prototype,其中objectNa ...
- JavaScript对象就是一组属性(方法)的集合
在JavaScript中,每个对象可以看作是多个属性(方法)的集合,引用一个属性(方法) 很简单,即: 对象名.属性(方法)名 除此之外,还可以用方括号的形式来引用: 对象名[“属性(方法)名”] 注 ...
- JavaScript 节点操作Dom属性和方法(转)
JavaScript 节点操作Dom属性和方法 一些常用的dom属性和方法,列出来作为手册用. 属性: 1.Attributes 存储节点的属性列表(只读) 2.childNodes 存储 ...
- JavaScript如何获取css属性
原文:JavaScript如何获取css属性 在web开发中,很多时候我们需要用JavaScript对网页的样式进行修改,接下来,我们就来看一下我们该如何访问css属性,针对不同情况及案例来进行分析. ...
随机推荐
- JS高级---浅拷贝
浅拷贝 拷贝就是复制, 就相当于把一个对象中的所有的内容, 复制一份给另一个对象, 直接复制, 或者说, 就是把一个对象的地址给了另一个对象, 他们指向相同, 两个对象之间有共同的属性或者方法, ...
- OpenGL 编程指南 (5.1)
1.OpenGL支持同时使用多个纹理单元,使用GL_TEXTUREi进行标识,使用前需要先激活对应的纹理单元,默认GL_TEXTURE0是激活绑定的. void glActiveTexture(GLe ...
- 电脑进不去BIOS解决办法
把所有外设(主要是硬盘,包括装在主板上的固态硬盘)拆下来,拆下纽扣电池给主板放电,装回纽扣电池,重启F1进入BIOS. 最终查到原因,是固态那里出的问题,固态作为启动硬盘,被自己搞得有问题了,有两个启 ...
- 题解 CF712C 【Memory and De-Evolution】
看到题我第一反应就是while循环 但是我竟然想正着推,失败,卡了十几分钟 后来我回来看到第三组测试数据 想到倒推 但是没坚持 于是我又卡了很久 过会我又回来想 AC了... 这个故事告诉我们,要努力 ...
- SDRAM中数据掩码的作用
DQM就是掩码控制位.在sdram中,每个DQM控制8bit Data在读操作的时候没什么大的影响,比如你读32位的sdram module, 但你只要其中低8bit的数据,没有关系,只要读出32bi ...
- 在已部署好的docker环境下配置nginx项目路径
第一步:申请一个docker连接账号,可以借用putty工具,如果使用sublime,可以下载sftp插件,上传.下载来同步你线上线下的文件: 第二步:修改nginx区域配置文件,在conf文件夹里放 ...
- Microsonf visual c++ 14+ 离线内网安装
内网离线安装方法:先下载官方的visualcppbuildtools: <br href=http://go.microsoft.com/fwlink/?LinkId=691126 >& ...
- ubuntu 离线装包
1,为什么要离线装包 防止有些包官方升级以后导致的不兼容,比如php5和php7,目前已经无法apt-get install php5了, 2,装包以前你得有安装包文件,deb或者是run deb包在 ...
- Hadoop TextInputFormat
1. TextInputFortmat TextInputFormat是默认的InputFormat.每条记录是一行输入.Key是LongWritable类型,存储该行在整个文件中的字节偏移量(不是行 ...
- 题解【洛谷P2615】[NOIP2015]神奇的幻方
题目描述 幻方是一种很神奇的 \(N \times N\) 矩阵:它由数字 \(1,2,3,\cdots \cdots ,N \times N\) 构成,且每行.每列及两条对角线上的数字之和都相同. ...