/*
把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可枚举的属性的更多相关文章

  1. [Effective JavaScript 笔记]第47条:绝不要在Object.prototype中增加可枚举的属性

    之前的几条都不断地重复着for...in循环,它便利好用,但又容易被原型污染.for...in循环最常见的用法是枚举字典中的元素.这里就是从侧面提出不要在共享的Object.prototype中增加可 ...

  2. JavaScript中对象的属性

    在JavaScript中,属性决定了一个对象的状态,本文详细的研究了它们是如何工作的. 属性类型 JavaScript中有三种不同类型的属性:命名数据属性(named data properties) ...

  3. JavaScript 中的延迟加载属性模式

    传统上,开发人员在 JavaScript 类中为实例中可能需要的任何数据创建属性.对于在构造函数中随时可用的小块数据来说,这不是问题.但是,如果在实例中可用之前需要计算某些数据,您可能不想预先支付该费 ...

  4. 借助JavaScript中的Dom属性改变Html中Table边框的颜色

    借助JavaScript中的Dom属性改变Html中Table边框的颜色 -------------------- <html> <head> <title>我是页 ...

  5. Javascript常用对象的属性和方法

    javascript为我们提供了一些非常有用的常用内部对象和方法.用户不需要用脚本来实现这些功能.这正是基于对象编程的真正目的. 在javascript提供了string(字符串).math(数值计算 ...

  6. JavaScript 数组方法和属性

    一. 数组对象的操作方法 1. 数组的创建 2.prototype属性 返回对象原型的引用,prototype属性时object共有的. objectName.prototype,其中objectNa ...

  7. JavaScript对象就是一组属性(方法)的集合

    在JavaScript中,每个对象可以看作是多个属性(方法)的集合,引用一个属性(方法) 很简单,即: 对象名.属性(方法)名 除此之外,还可以用方括号的形式来引用: 对象名[“属性(方法)名”] 注 ...

  8. JavaScript 节点操作Dom属性和方法(转)

    JavaScript 节点操作Dom属性和方法   一些常用的dom属性和方法,列出来作为手册用. 属性:   1.Attributes 存储节点的属性列表(只读)   2.childNodes 存储 ...

  9. JavaScript如何获取css属性

    原文:JavaScript如何获取css属性 在web开发中,很多时候我们需要用JavaScript对网页的样式进行修改,接下来,我们就来看一下我们该如何访问css属性,针对不同情况及案例来进行分析. ...

随机推荐

  1. AntDesign(React)学习-12 使用Table

    AntDesign(Vue)版的Table中使用图片https://www.cnblogs.com/zhaogaojian/p/11119762.html 之前在使用VUE版Table时,使用大图片时 ...

  2. OpenCV中imread失败cvLoadImage成功

    MYLAF 环境说明 编程环境:Windows 10(64bit), VS2013, OpenCV 2.4.12; 编程语言:C/C++: MYLAF 现象 在代码中,调用imread读取图片失败,但 ...

  3. winform常用控件介绍

    1.窗体 12.Label 控件 33.TextBox 控件 44.RichTextBox控件 55.NumericUpDown 控件 76.Button 控件 77.GroupBox 控件 78.R ...

  4. EF工作流程

    1.EF基本的CRUD(增删改查)流程 2.EF的工作过程简析 EDM--Entity Data Model--实体数据模型 概念模型: EF通过领域类,上下文类,默认约定和配置构建概念模型. 存储模 ...

  5. sql 单表操作

    前戏 --创建表 create table xxx( id int unsigned not null auto_increment primary key, name varchar(20) not ...

  6. 并查集-G - 食物链

    G - 食物链 动物王国中有三类动物A,B,C,这三类动物的食物链构成了有趣的环形.A吃B, B吃C,C吃A.现有N个动物,以1-N编号.每个动物都是A,B,C中的一种,但是我们并不知道它到底是哪一种 ...

  7. Python - isinstance()更深刻的理解

    起因经过 今天翻collections.abc的文档时,我知道list的实例在逻辑上(因为duck typing 鸭子类型)是Container和不能hash的(因为list可变),就试下面的代码是否 ...

  8. js打开新窗口,js打开居中窗口,js打开自定义窗口

    ================================ ©Copyright 蕃薯耀 2020-01-07 https://www.cnblogs.com/fanshuyao/ var is ...

  9. git免密拉取代码

    里介绍通过ssh公钥的方式免密拉取代码 以linux服务器为例,windows方式是一样的 1.用命令生成ssh key ssh-keygen -t rsa -C "xx@xxxcom&qu ...

  10. Vue(二)

    ---恢复内容开始--- 1.vue条件指令 可以运行加减运算 可以进行if判断 <!DOCTYPE html> <html> <head> <meta ch ...