1、Object 对象 (JavaScript)
提供对所有 JavaScript 对象通用的功能。参考网站:https://msdn.microsoft.com/zh-cn/library/kb6te8d3(v=vs.94).aspx
2、Object.create()

概念:Object.create():是E5中提出的一种新的对象创建方式。

语法:Object.create(proto [, propertiesObject ]),第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。

propertiesObject 参数的详细解释:(默认都为false)。数据属性,writable:是否可任意写;configurable:是否能够删除,是否能够被修改;enumerable:是否能用 for in 枚举;value:值;访问属性:get(): 访问;set(): 设置

示例如下:

    function Car(desc){
this.desc = desc;
this.color = 'red';
}
Car.prototype = {
getInfo:function(){
return 'A ' + this.color + ' ' + this.desc + '.';
}
}
var car = Object.create(Car.prototype);
car.color = 'blue';
var info = car.getInfo();
console.log(info);//A blue undefined. var obj = {
a:function(){
console.log();//
},
b:function(){
console.log()
},
c:function(){
console.log()
}
}
var newObj = {};
newObj = Object.create(obj,{
t1:{
value:'yupeng',
writable:true
},
bar: {
configurable: false,
get: function() { return bar; },
set: function(value) { bar=value }
}
}) console.log(newObj.a());//undefined
console.log(newObj.t1);//yupeng
newObj.t1 = 'yupeng1'
console.log(newObj.t1);//yupeng1
newObj.bar = ;
console.log(newObj.bar);//

3、Object.keys()

Object.keys():返回一个由给定对象的所有可枚举自身属性的属性名组成的数组,数组中属性名的排列顺序和使用for-in循环遍历该对象时返回的顺序一致(两者的主要区别是 for-in 还会遍历出一个对象从其原型链上继承到的可枚举属性)。

语法:Object.keys(obj)。

参数:obj返回该对象的所有可枚举自身属性的属性名。

    var arr = ['a','b','c'];
console.log(Object.keys(arr));//["0", "1", "2"]
// 类数组对象
var obj = { : "a", : "b", : "c"};
console.log(Object.keys(obj)); // ["0", "1", "2"] // getFoo是个不可枚举的属性
var my_obj = Object.create({},
{
getFoo : {
value : function () {
return this.foo
}
}
});
my_obj.foo = ;
console.log(Object.keys(my_obj)); // ["foo"]

4、Object.prototype.isPrototypeOf()

isPrototypeOf:是用来判断要检查其原型链的对象是否存在于指定对象实例中,是则返回true,否则返回false。

语法:prototype.isPrototypeOf(object)。

参数:prototype,必选。对象原型。 object,必选。另一个对象,将对其原型链进行检查。

示例如下:

function person(name,age){
this.name = name;
this.age = age;
}
var person1 = new person('xiaoming',);
console.log(person.prototype.isPrototypeOf(person1));//true;原型链的对象:person,对象实例;person1

5、Object.getPrototypeOf()

getPrototypeOf:返回对象的原型。

语法:Object.getPrototypeOf(object)

参数:object,必需。引用原型的对象。

返回值:object 参数的原型。原型也是对象。

function person(name,age){
this.name = name;
this.age = age;
}
var person1 = new person('xiaoming',);
var proto = Object.getPrototypeOf(person1);//获取对象person1的原型
proto.eatFruit = 'apple'; //给原型添加新的属性
console.log(person1.eatFruit);//apple
var reg = /a/;
var result1 = (Object.getPrototypeOf(reg) === RegExp.prototype);//比较正则表达式对象的原型
console.log(result1 + " ");//true var err = new Error("an error");
var result2 = (Object.getPrototypeOf(err) === Error.prototype);//比较对象原型
console.log(result2);//true

6、object.hasOwnProperty()

object.hasOwnProperty(proName):确定某个对象是否具有带指定名称的属性。

语法:object.hasOwnProperty(proName)

参数:object,必需。对象的实例。proName,必需。一个属性名称的字符串值

function person(name,age){
this.name = name;
this.age = age;
}
person.prototype.singsong = function(songName){
this.songName = songName;
console.log('singsong');
}
person.prototype.sayHello = function(){
console.log('sayHello');
}
var person1 = new person('xiaoming',);
var person2 = new person('angerbaby',);
console.log(person1.hasOwnProperty("name"));//true;
console.log(person1.hasOwnProperty("age"));//true;
console.log(person1.hasOwnProperty("singsong"));//false;
console.log(person.prototype.hasOwnProperty("singsong"));//true;
console.log(person.prototype.hasOwnProperty("songName"));//false;

7、Object.getOwnPropertyNames()

Object.getOwnPropertyNames(object):返回对象自己的属性的名称。一个对象的自己的属性是指直接对该对象定义的属性,而不是从该对象的原型继承的属性。对象的属性包括字段(对象)和函数。

语法:Object.getOwnPropertyNames(object)

参数:object,必需。包含自己的属性的对象。

返回值:一个数组,其中包含对象自己的属性的名称。

function person(name,age,number){
this.name = name;
this.age = age;
this.number = number;
this.toString = function(){
return (this.name+","+this.age+","+this.number);
}
}
var person1 = new person('xiaoming',,'');
var propertyArr = Object.getOwnPropertyNames(person1);
console.log(propertyArr);//["name", "age", "number", "toString"] //下面的示例显示了使用 person 构造函数构造的 person1 对象中以字母“S”开头的属性名。
var names = Object.getOwnPropertyNames(person1).filter(checkkey);//filter(),传参为一个函数,作用为用这个函数来过滤数组元素
console.log(names);//["name", "number"]
function checkkey(value){
var firstchar = value.substr(,);
if(firstchar.toLowerCase() == 'n'){
return true;
}else{
return false;
}
}
//下面的示例创建一个对象,该对象具有三个属性和一个方法。然后使用 keys 方法获取该对象的属性和方法。
var propertyArr1 = Object.keys(person1);
console.log(propertyArr1);//["name", "age", "number", "toString"]

理解js对象中的可枚举性(enumerable):

概念:可枚举性(enumerable)用来控制所描述的属性,是否将被包括在for...in循环之中。具体来说,如果一个属性的enumerable为false,下面三个操作不会取到该属性。

  • for..in循环
  • Object.keys方法
  • JSON.stringify方法
var o = {a:, b:};
o.c = ;
Object.defineProperty(o, 'd', {
value: ,
enumerable: false
});
o.d
// for( var key in o )
console.log( o[key] );
// 1
// 2
// Object.keys(o) // ["a", "b", "c"]
JSON.stringify(o) // => "{a:1,b:2,c:3}"
//上面代码中,d属性的enumerable为false,所以一般的遍历操作都无法获取该属性,使得它有点像“秘密”属性,但还是可以直接获取它的值。
//至于for...in循环和Object.keys方法的区别,在于前者包括对象继承自原型对象的属性,而后者只包括对象本身的属性。如果需要获取对象自身的所有属性,不管enumerable的值,可以使用Object.getOwnPropertyNames方法

8、Object.defineProperty()

概念:将属性添加到对象,或修改现有属性的特性。

语法:Object.defineProperty(object, propertyname, descriptor)

参数:obj为需要定义的属性对象;prop为需定义或修改的属性的名字;descriptor为将被定义或修改的属性的描述符。
返回值:返回传入函数的对象,即第一个参数obj

对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。数据描述符是一个拥有可写或不可写值的属性。存取描述符是由一对 getter-setter 函数功能来描述的属性。描述符必须是两种形式之一;不能同时是两者。

数据描述符和存取描述符均具有以下可选键值:

  • configurable:当且仅当该属性的 configurable 为 true 时,该属性才能够被改变,也能够被删除。默认为 false。
  • enumerable:当且仅当该属性的 enumerable 为 true 时,该属性才能够出现在对象的枚举属性中。默认为 false。

数据描述符同时具有以下可选键值:

  • value:该属性对应的值。可以是任何有效的 JavaScript 值(数值,对象,函数等)。默认为 undefined。
  • writable:当且仅当该属性的 writable 为 true 时,该属性才能被赋值运算符改变。默认为 false。

存取描述符同时具有以下可选键值:

  • get:一个给属性提供 getter 的方法,如果没有 getter 则为 undefined。该方法返回值被用作属性值。默认为 undefined。
  • set:一个给属性提供 setter 的方法,如果没有 setter 则为 undefined。该方法将接受唯一参数,并将该参数的新值分配给该属性。默认为 undefined。

记住,这些选项不一定是自身属性,如果是继承来的也要考虑。为了确认保留这些默认值,你可能要在这之前冻结 Object.prototype,明确指定所有的选项,或者将__proto__属性指向null。

// 使用 __proto__
Object.defineProperty(obj, "key", {
__proto__: null, // 没有继承的属性
value: "static" // 没有 enumerable
// 没有 configurable
// 没有 writable
// 作为默认值
}); // 显式
Object.defineProperty(obj, "key", {
enumerable: false,
configurable: false,
writable: false,
value: "static"
});

9、Object.defineProperties()

概览:方法在一个对象上添加或修改一个或者多个自有属性,并返回该对象。

语法:Object.defineProperties(obj, props)

参数:obj:将要被添加属性或修改属性的对象,props:该对象的一个或多个键值对定义了将要为对象添加或修改的属性的具体配置。

var obj = {};
Object.defineProperties(obj, {
"property1": {
value: true,
writable: true
},
"property2": {
value: "Hello",
writable: false
}
// 等等.
});
alert(obj.property2) //弹出"Hello"

详解javascript,ES5标准中新增的几种高效Object操作方法的更多相关文章

  1. 详解javascript,ES5标准中新增的几种高效Array操作方法

    1.js中常用的数组Array对象属性: 如图,其中用红色圆圈标记的部分,为ES5新增的属性. 2.浏览器支持情况: IE:9+; Chrome; Firefox2+; Safari 3+; Oper ...

  2. 详解JavaScript数组过滤相同元素的5种方法

    详解JavaScript数组过滤相同元素的5种方法:https://www.jb51.net/article/114490.htm

  3. Scala 深入浅出实战经典 第61讲:Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析

    王家林亲授<DT大数据梦工厂>大数据实战视频 Scala 深入浅出实战经典(1-87讲)完整视频.PPT.代码下载: 百度云盘:http://pan.baidu.com/s/1c0noOt ...

  4. 【转】详解JavaScript中的this

    ref:http://blog.jobbole.com/39305/ 来源:foocoder 详解JavaScript中的this JavaScript中的this总是让人迷惑,应该是js众所周知的坑 ...

  5. (转载)详解Javascript中prototype属性(推荐)

    在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不存在类(Class)的概念的,javascript中不 ...

  6. 详解 javascript中offsetleft属性的用法(转)

    详解 javascript中offsetleft属性的用法 转载  2015-11-11   投稿:mrr    我要评论 本章节通过代码实例介绍一下offsetleft属性的用法,需要的朋友可以做一 ...

  7. 详解javascript中的this对象

    详解javascript中的this对象 前言 Javascript是一门基于对象的动态语言,也就是说,所有东西都是对象,一个很典型的例子就是函数也被视为普通的对象.Javascript可以通过一定的 ...

  8. js对象详解(JavaScript对象深度剖析,深度理解js对象)

    js对象详解(JavaScript对象深度剖析,深度理解js对象) 这算是酝酿很久的一篇文章了. JavaScript作为一个基于对象(没有类的概念)的语言,从入门到精通到放弃一直会被对象这个问题围绕 ...

  9. 详解javascript的类

    前言 生活有度,人生添寿. 原文地址:详解javascript的类 博主博客地址:Damonare的个人博客 Javascript从当初的一个"弹窗语言",一步步发展成为现在前后端 ...

随机推荐

  1. 全动态Portlet点击后选中样式

    1  背景概述 在配置公司云平台的帮助信息过程中,由于使用的全动态portlet的数据URL获取到的是静态数据,没有办法在后台做选中的逻辑判断,所以需要在前台来控制选中列表的样式,这里将对前台选中列表 ...

  2. HTTPS能有效保护用户隐私

    HTTPS就等于HTTP加上TLS(SSL),HTTPS协议的目标主要有三个: http://hovertree.com/menu/webfront/ 数据保密性.保证内容在传输过程中不会被第三方查看 ...

  3. 【Java每日一题】20161123

    package Nov2016; import java.util.Scanner; public class Ques1123 { public static void main(String[] ...

  4. Go语言的编程范式

    由于比较古怪的语言特性,感觉代码的封装性是一种不同的思路. 包管理的火热程度居然没有nodejs高,这是为什么 package form import ( "encoding/gob&quo ...

  5. C语言关键字、标识符和注释

    一.关键字 C语言提供的有特殊含义的符号,共32个. 在Xcode中关键字全部高亮显示,关键字全部都为小写.如return.int等. 二.标识符 定义:标识符是程序员在程序中自定义的一些符号和名称. ...

  6. 小白linux安装php 5.6+nginx配置(踩坑版)

    因为要搭建个知识库,直接用wordpress,这前提是得先装php,实在不喜欢XAMPP,所以自己折腾,没想到php这一来还不少啊,从头到尾折腾了一个小时多.记录下主要的流程和遇到的坑. 首先官网下载 ...

  7. sql server 数据误删找回

    /****** Object: StoredProcedure [dbo].[Recover_Deleted_Data_Proc] Script Date: 04/23/2014 22:11:59 * ...

  8. 【Spring】Spring框架之Struts2和Spring的优点

    Java Web开发使用Structs2和Spring框架的好处 今年我一直在思考web开发里的前后端分离的问题,到了现在也颇有点心得了,随着这个问题的深入,再加以现在公司很多web项目的控制层的技术 ...

  9. jQuery原型属性constructor,selector,length,jquery和原型方法size,get,toArray源码分析

    首先看一下在jQuery1.7.1中定义的原型属性和方法有哪些? init方法作为实际的构造函数已经详细分析过了,需要了解可以参考http://www.cnblogs.com/yy-hh/p/4492 ...

  10. 世界城市 XML

    下载地址:http://www.qlcoder.com/uploads/dd01140921/147988679320159.xml <Location> <CountryRegio ...