Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ES5-Object.prototype上的方法 #11

Open
hubvue opened this issue Dec 19, 2018 · 0 comments
Open

ES5-Object.prototype上的方法 #11

hubvue opened this issue Dec 19, 2018 · 0 comments

Comments

@hubvue
Copy link
Owner

hubvue commented Dec 19, 2018

Object.getPrototypeOf

用于读取一个对象的原型的对象。

function Car(){}
var car = new Car();
Object.getPrototypeOf(car) === Car.prototype  //true

Object.getOwnPropertyDescriptor

用于获取一个属性的描述对象

var obj = {
    name : "wang",
}
Object.getOwnPropertyDescriptor(obj,"name");

Object.getOwnPropertyNames

Object.getOwnPropertyNames() 返回一个数组,该数组对元素是 obj自身拥有的枚举或不可枚举属性名称字符串。

var obj = {
    a : 'a',
    b : 'b',
    c : 'c'
}
Object.getOwnPropertyNames(obj);

Object.create

创建一个对象的副本,有参数的话继承于参数对象,无参数的话类似于字面量创建对象,当参数为null的时候,创建最干净的对象,无任何集成

var obj = Object.create(null);
console.log(obj);

Object.defineProperty

Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有描述属性, 并返回这个对象。

var obj = {};
Object.defineProperty(obj,"name",{
    value : "wang", //name 的值
    configurable : true,    //是否可配置
    enumerable : true, //是否可枚举
    writable : true //是否可写
    //get  给属性添加一个getter
    //set  给属性添加一个setter
})

Object.definProperties

Object.defineProperties方法在一个对象上定义多个新属性,或者修改现有属性,返回该对象。

var obj = {};
Object.defineProperties(obj,{
    "name" : {
        value : "wang", //name 的值
        configurable : true,    //是否可配置
        enumerable : true, //是否可枚举
        writable : true //是否可写
        //get  给属性添加一个getter
        //set  给属性添加一个setter
    },
    "age" : {
        value : 18, //name 的值
        configurable : true,    //是否可配置
        enumerable : true, //是否可枚举
        writable : true //是否可写
        //get  给属性添加一个getter
        //set  给属性添加一个setter
    }
})

Object.seal

Object.seal()方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。

const object = {name : 'asdf'};
Object.seal(object);
object.name = "wang";
object.name //wang
delete object.name      //false
object.age = 12;
objde.age //undefined

Object.freeze

Object.freeze() 方法可以冻结一个对象,冻结指的是不能向这个对象添加新的属性,不能修改其已有属性的值,不能删除已有属性,以及不能修改该对象已有属性的可枚举性、可配置性、可写性。该方法返回被冻结的对象。

主要注意的是,这个冻结是浅冻结,如果一个对象的属性也是一个对象的话,这个对象中的属性是冻结不了的。

var obj = {name : 'age',test : {name : 'wang'}};
Object.freeze(obj); //{name: "age",test: {…}}
obj.name = "wang";
obj.name    //age  无法修改
obj.test.name = "chong"
obj.test.name  //chong  修改成功

Object.preventExtensions

Object.preventExtensions将一个对象设置为不可扩展的。

var obj = {};
Object.preventExtensions(obj);
Object.defineProperty(obj,"name",{
    value : "wang",     //报错
})

Object.isSealed

用于判断一个对象是否被密封

var obj = {};
var obj1 = {};
Object.seal(obj);
Object.isSealed(obj)    //true
Object.isSealed(obj1)   //false

Object.isFrozen

用于判断一个对象是否被冻结

var obj = {};
var obj1 = {};
Object.freeze(obj);
Object.isFrozen(obj)    //true
Object.isFrozen(obj1)   //false

Object.isExtensible

用于判断一个对象是否是不可扩展的

var obj = {};
var obj1 = {};
Object.preventExtensions(obj);
Object.isExtensible(obj)    //true
Object.isExtensible(obj1) //false

Object.keys

返回一个由自身可枚举属性组成的数组,数组中属性的排列顺序和使用for...in的遍历该对象时返回的顺序一致。

var obj = {
    name : 'wang',
    age : 18,
    lastname : 'chong',
}
Object.keys(obj);

Object.is

Object.is判断两个值是否相等,与===的行为保持一致。
唯有两个不同的地方:

  1. +0不等于-0
  2. NaN等于自身
+0 === -0 //true
NaN === NaN // false

Object.is(+0, -0) // false
Object.is(NaN, NaN) // true
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant