Object.create()的使用总汇:创建对象,参数说明,兼容性的实现

时间: 2018-01-02阅读: 1153标签: Object

Object.create()的含义和语法

Object.create()是E5的一个新特性,用于创建一个具有指定原型且可选择性地包含指定属性的对象,其实可以理解为继承一个对象。

Object.create(prototype, descriptors)
//prototype:必需。 要用作原型的对象,如果没有则传为 null。
//descriptors:可选。 包含一个或多个属性描述符的 JavaScript 对象。


Object.create()创建新对象

1、创建null原型的对象  

var newObj = Object.create(null, {
  name: {
       value: "newObj",
       enumerable: true,
   }, 
});
console.log(newObj);//{name: "newObj"}

说明:使用null创建的是一个空对象,不会具备Object.prototype 原型链上的属性或者方法,比如toString()和valueOf()。通过设置enumerable:true来表明newObj的name属性为可枚举的,其值为newObj。

2、创建一个普通的空对象

var obj1=Object.create(Object.prototype);

这样创建的对象等价于:

var obj2={};
var obj3=new Object();
console.log(obj1.__proto__===obj2.__proto__);//true
console.log(obj1.__proto__===obj3.__proto__);//true


Object.create()第二个参数说明:

1、数据属性:

writable:是否可任意写,表示能否修改value值
configurable:是否可配置,表示能否通过delete删除属性从而重新定义属性
enumerable:是否可枚举,能用 for in 枚举
value:值

2、访问属性:

configurable:是否可配置,表示能否通过delete删除属性从而重新定义属性
enumerable:是否可枚举
get:在读取属性时调用的函数,默认是undefined
set:在写入属性时调用的函数,默认是undefined  

3、例如:

var obj = {
    a:function(){
        console.log('a');
    },
}
var newObj= Object.create(obj,{
    n1:{
        value:'n1',
        writable:false,//不可写
        configurable: false,//不可删除属性从而重新定义属性;
    },
    n2: {
        configurable: false,
        get: function() { return n2; },
        set: function(value) { n2=value }
    } 
})
console.log(newObj.a());//输出a
console.log(newObj.n1);//输出n1
newObj.n1='hellow'
console.log(newObj.n1);//输出n1,这里由于设置了writable:false,//不可写,所以修改不了newObj.n1它的值
newObj.n2='haha';
console.log(newObj.n2);

Object.defineProperty(newObj,'n1',{
    configurable: true,
    enumerable: true,
});//报错:Uncaught TypeError: Cannot redefine property: n1

可以看出:我们可以通过Object.defineProperty方法重新修改属性,但是如果将configurable设置为false,将不能再调用Object.defineProperty()对属性的行为进行修改,除了writable 只能修改为 false。


Object.create()的兼容性

Object.create在某些浏览器没有支持,需要给出Object.create的兼容实现:

// 参考JavaScript高级程序设计中的原型式继承​
Object.prototype.create = function(obj) {
if(Object.prototype.create){
return Object.prototype.create //特性检测,判断浏览器是否兼容
}else{
function F(){ F.prototype = obj; //以传入参数为原型构造对象
return new F(); } } };

说明:

Object()函数内部先创建了一个临时性的构造函数,然后将传入的对象作为这个构造函数的原型,最后返回了这个临时类型的新实例。
从本质上讲object()对传入其中的对象执行了一次浅复制。


站长推荐

1.云服务推荐: 国内主流云服务商,各类云产品的最新活动,优惠券领取。地址:阿里云腾讯云华为云

2.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/300

javascript中object是什么?

object是javascript中一个被我们经常使用的数据类型,而且JS中的所有对象都是继承自Object对象的。下面本篇文章就来给大家简单介绍一下javascript中的Object类型,希望对大家有所帮助。

为什么你应该使用 Object.is() 进行相等性比较

因此Javascript提供了三等运算符,三等运算符更加严格并且不会将操作数进行强制类型转换。然而三等运算符也不是最好的解决方案,也存在问题

Javascript中的object相等

相等是JavaScript中起初最让人困惑的部分。==和===的比较、强制类型的顺序等等,都使得这个问题变得复杂。今天,我们会聚焦另一个方面:object相等是如何实现的。

Object.keys方法

Object.keys() 方法会返回一个由一个给定对象的自身可枚举属性组成的数组,数组中属性名的排列顺序和使用 for...in 循环遍历该对象时返回的顺序一致 。

JavaScript中的Object.create的模拟实现

不难看出来,其实Object.create只是对对象的一个浅复制,在修改引用类型的属性时,所有属性都会被修改。这是由于Object.create的实现机制,只是利用new,相当于是在中间加了一个中间层,从图中也可以看到,多了一个__proto__指向原对象。

Object.defineProperty

想到Object.defineProperty,首先不得不提到对象,对象是JavaScript的基础,有一种常见的说法“JavaScript中万物皆是对象”。这种说法其实并不那么准确,根据 JavaScript 对语言类型的分类

js中的Object.defineProperty()和defineProperties()

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

Js Object.freeze和Object.seal

本文实例讲述了JS Object.preventExtensions(),Object.seal()与Object.freeze()用法。分享给大家供大家参考,Object.preventExtensions 只能阻止一个对象不能再添加新的自身属性,仍然可以为该对象的原型添加属性。

Object构造函数方法Object.getOwnPropertyDescriptors()

Object.getOwnPropertyDescriptors(obj)用来获取一个对象的所有自身属性的描述符;返回值所指定对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象

Object构造函数的方法 之Object.entries()

返回一个给定对象自身可枚举属性的键值对数组,其排列与使用 for…in循环遍历该对象时返回的顺序一致(区别在于for…in循环也枚举原型链中的属性)

点击更多...

内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!

文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全运营推广