美文网首页
对象方法

对象方法

作者: strong9527 | 来源:发表于2016-09-06 19:46 被阅读33次

对于此博文的整理

1 Object.is()方法

类似于js中的 === 比较方法。但是有些许区别


+0 === -0 //true;
NaN === NaN //false;

Object.is({a:3},{a:3});  // false
Object.is(NaN,NaN) //true;
Object.is(+0,-0); //false;

2 Object.assign()

用于对象的合并,将原对象的所有可枚举属性复制到目标对象。

第一个参数是目标对象,后面的参数都是原对象。


var target = { a: 1 };

var source1 = { b: 2 };
var source2 = { c: 3 };

Object.assign(target, source1, source2);
target // {a:1, b:2, c:3}

注意点,

Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。


var obj1 = {a: {b: 1}};
var obj2 = Object.assign({}, obj1);

obj1.a.b = 2;
obj2.a.b // 2

3 对象属性的可枚举性和遍历。

  • ES5有三个操作会忽略enumerable为false的属性。

for...in循环:只遍历对象自身的和继承的可枚举的属性
Object.keys():返回对象自身的所有可枚举的属性的键名
JSON.stringify():只串行化对象自身的可枚举的属性

  • ES6一共有5种方法可以遍历对象的属性。

(1)for...in

for...in循环遍历对象自身的和继承的可枚举属性(不含Symbol属性)

(2)Object.keys(obj)

Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性)。


var obj = { a : 3 };

var c = function(){
    this.b = 4;
}

c.prototype = obj;

var d = new c();

for( i in d ){
    console.log( i );
}

console.log(Object.keys(d));

4 proto属性

proto属性(前后各两个下划线),用来读取或设置当前对象的prototype对象。目前,所有浏览器(包括IE11)都部署了这个属性。


var obj = {
  method: function() { ... }
};
obj.__proto__ = someOtherObj;

  • 可以通过Object.getPrototypeOf()来取得object中的proto

var a = {
    b : 3
}

console.log(Object.getPrototypeOf(a));

  • 可以通过Object.setPrototypeOf()来进行设置。

var a = {
    a : 1
}

var proto = {
    b : 2,
    c : 3
}

Object.setPrototypeOf(a,proto);

console.log(a);   

/*
    Object {a:1}
        a:1
        __proto__:Object
            b:2
            c:3
*/


5 Object.keys(), Object.values(),Object.entries(),

  • Object.keys()

ES5引入了Object.keys方法,返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键名。


var obj = { foo: "bar", baz: 42 };
Object.keys(obj)
// ["foo", "baz"]

  • Object.values()

Object.values方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值。


var obj = { foo: "bar", baz: 42 };
Object.values(obj)
// ["bar", 42]

  • Object.entries()

Object.entries方法返回一个数组,成员是参数对象自身的(不含继承的)所有可遍历(enumerable)属性的键值对数组。


var obj = { foo: 'bar', baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]

Object.getOwnPropertyDescriptors();

  • ES5有一个Object.getOwnPropertyDescriptor方法,返回某个对象属性的描述对象(descriptor)。

var obj = { p: 'a' };

Object.getOwnPropertyDescriptor(obj, 'p')
// Object { value: "a",
//   writable: true,
//   enumerable: true,
//   configurable: true
// }

  • ES7有一个提案,提出了Object.getOwnPropertyDescriptors方法,返回指定对象所有自身属性(非继承属性)的描述对象。

const obj = {
  foo: 123,
  get bar() { return 'abc' }
};

Object.getOwnPropertyDescriptors(obj)
// { foo:
//    { value: 123,
//      writable: true,
//      enumerable: true,
//      configurable: true },
//   bar:
//    { get: [Function: bar],
//      set: undefined,
//      enumerable: true,
//      configurable: true } }
Object.getOwnPropertyDescriptors方法返回一个对象,所有原对象的属性名都是该对象的属性名,对应的属性值就是该属性的描述对象。

相关文章

  • 学习途中之类方法和对象方法

    对象方法1、 对象方法/实例方法我们之前学习的方法就叫做对象方法.对象方法的调用必须要先创建对象,通过对象来调用....

  • 1.8. 对象方法的声明和实现

    目录 对象方法声明 对象方法实现 1.对象方法声明 格式 特征对象方法以-开头如 -(void)xx;对象方法只能...

  • 数组&字符串方法&Math&Date

    数组方法 String 对象方法 数学Math方法 日期对象Date方法 Number对象方法 function对...

  • OC语言基础

    第一课 1.对象方法和类方法区别 对象方法对象方法是属于对象的以减号-开头只能让对象调用,没有对象,这个方法根本不...

  • OC +方法和-方法(补充篇)

    类方法和对象方法1、对象方法:① 减号 - 开头;② 只能由对象来调用;③ 对象方法中能访问当前对象的成员变量(实...

  • 对象方法和类方法

    -对象方法 +类方法 调用对象方法必须先创建对象,在通过对象来调用。 类方法不依赖对象,使用对象名直接调用。 类方...

  • Objective-C基础学习之对象方法和类方法的声明与实现

    1.对象方法声明 格式 特征对象方法以-开头如 -(void)xx;对象方法只能由对象来调用对象方法中可以访问当前...

  • OC重学第二天

    一. 类方法 OC 中方法分为两种.对象方法/实例方法如果想要调用对象方法必须要创建对象,通过对象来调用类方法.类...

  • 「Objective-C」类和方法

    1. 类方法和对象方法 对象方法 减号 - 开头 只能由对象来调用 对象方法中能访问当前对象的成员变量(实例变量)...

  • 1.1.1. 函数与方法对比

    目录 对象方法 函数 对象方法:(1)对象方法的实现只能写在@implementation...@end中,对象方...

网友评论

      本文标题:对象方法

      本文链接:https://www.haomeiwen.com/subject/qjodettx.html