1.Object.create() 是什么?

  Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式,第一个参数是要继承的原型,如果不是一个子函数,可以传一个null,第二个参数是对象的属性描述符,这个参数是可选的。

  例如: 

function Car (desc) {this.desc = desc;this.color = "red";
}Car.prototype = {getInfo: function() {return 'A ' + this.color + ' ' + this.desc + '.';}
};
//instantiate object using the constructor function
var car =  Object.create(Car.prototype);
car.color = "blue";
alert(car.getInfo());

结果为:A blue undefined.

2.propertiesObject 参数的详细解释:(默认都为false)

 数据属性

  • writable:是否可任意写
  • configurable:是否能够删除,是否能够被修改
  • enumerable:是否能用 for in 枚举
  • value:值

 访问属性:

  • get(): 访问
  • set(): 设置

3.例子:直接看例子就知道怎么用。 

<!DOCTYPE html>
<html>
<head><title>yupeng's document </title><meta charset="utf-8"/>
</head>
<body><script type="text/javascript">var obj = {a:function(){console.log(100)},b:function(){console.log(200)},c:function(){console.log(300)}}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());console.log(newObj.t1);newObj.t1='yupeng1'console.log(newObj.t1);newObj.bar=201;console.log(newObj.bar)function Parent() { }var parent = new Parent();var child = Object.create(parent, {dataDescriptor: {value: "This property uses this string as its value.",writable: true,enumerable: true},accessorDescriptor: {get: function () { return "I am returning: " + accessorDescriptor; },set: function (val) { accessorDescriptor = val; },configurable: true}});child.accessorDescriptor = 'YUPENG';console.log(child.accessorDescriptor);var Car2 = function(){this.name = 'aaaaaa'} //this is an empty object, like {}Car2.prototype = {getInfo: function() {return 'A ' + this.color + ' ' + this.desc + '.';}};var newCar = new Car2();var car2 = Object.create(newCar, {//value propertiescolor:   { writable: true,  configurable:true, value: 'red' },//concrete desc valuerawDesc: { writable: true, configurable:true, value: 'Porsche boxter' },// data properties (assigned using getters and setters)desc: { configurable:true, get: function ()      { return this.rawDesc.toUpperCase();  },set: function (value) { this.rawDesc = value.toLowerCase(); }  }}); car2.color = 'blue';console.log(car2.getInfo());car2.desc = "XXXXXXXX";console.log(car2.getInfo());console.log(car2.name);</script>
</body>
</html>

结果为:

100
yupeng
yupeng1
201 
I am returning: YUPENG 
A blue PORSCHE BOXTER. 
A blue XXXXXXXX. 
aaaaaa
参考文章:
1.http://www.htmlgoodies.com/beyond/javascript/object.create-the-new-way-to-create-objects-in-javascript.html
2.http://www.jimmycuadra.com/posts/ecmascript-5-object-creation-and-property-definition
3.http://msdn.microsoft.com/zh-cn/library/ie/ff925952(v=vs.94).aspx

转载于:https://www.cnblogs.com/m2maomao/p/7754100.html

javascript一种新的对象创建方式-Object.create()相关推荐

  1. JavaScript新的对象创建方式---Object.create()

    Object.create(proto [, propertiesObject ]) 是E5中提出的一种新的对象创建方式, 第一个参数是要继承的原型,如果不是一个子函数,可以传一个null, 第二个参 ...

  2. 第163天:js面向对象-对象创建方式总结

    面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. 1 var obj = {}; 2 //对象有自己的 属性 ...

  3. Spring学习(二)—— 对象创建方式及依赖注入

    文章目录 对象创建方式 配置 依赖注入 构造器注入 Set方式注入 拓展方式注入 对象创建方式 默认使用无参构造器创建 当我们需要使用有参构造器时,有以下几种方式: 1.下标赋值 <!--第一种 ...

  4. 尝试一种新的带人方式

    尝试一种新的带人方式 最早带人时,没有什么经验,我总是觉得他们做事太慢.慢得让我受不了时,干脆帮他们把代码和文档都写了.一般情况下,也勉强能赶上进度.但这占去了我大部分业余时间,搞我很累,他们似乎也不 ...

  5. spring配置详解-三种对象创建方式_

    新建一个包,b_create,关于Spring创建对象的方式,咱们首先先介绍默认方式,我复制一个配置文件过来,在这个包下创建一个配置文件,把这些注释可以删掉了,现在咱们看到的情况,是常见的情况,这种情 ...

  6. Spring三种对象创建方式

    1.创建方式1:无参构造 我们先创建一个User类: public class User {private String name;private int age;public User() {Sys ...

  7. JavaScript七种非常经典的创建对象方式

    JavaScript创建对象的方式有很多,通过Object构造函数或对象字面量的方式也可以创建单个对象,显然这两种方式会产生大量的重复代码,并不适合量产.接下来介绍七种非常经典的创建对象的方式,他们也 ...

  8. 一篇文章认识4种Java多线程的创建方式

    Java4种多线程的创建: 什么是程序? 什么是进程? 什么是线程? 并行与并发: 那么JAVA多线程实现方式: (1)继承Thread类实现多线程: (2)实现Runnable接口方式实现多线程: ...

  9. C++ 对象创建方式

    原址 C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test  或者 Test* pTest = new Test(). 这两种方法都可以实例化一个对象,但是这两种方法有很 ...

最新文章

  1. ZOJ 2723 Semi-Prime ||ZOJ 2060 Fibonacci Again 水水水!
  2. git 换行问题_后端必备的 Git 分支开发规范指南
  3. STM32F103的USART1和USART2的TX和RX所对应的分别是那个引脚?
  4. linux做成service服务器,Zabbix2.0.3做成Service
  5. 中国石化行业节能减排行业发展动态与运营前景规划展望报告2022年
  6. HDU3333 Turing Tree 离线树状数组
  7. webservice传送XML大小估算
  8. 【leetcode】Max Points on a Line(hard)☆
  9. 敲一下enter键,完成iOS的打包工作
  10. 密集预测任务的多任务学习(Multi-Task Learning)研究综述 - 网络结构篇(上)
  11. 常见搜索算法(二):二分查找
  12. SPI与IIC的异同
  13. 目前绝大多数处理语言先验性文章总结
  14. 深度学习目标检测模型综述
  15. 云服务器上的项目无法连接数据库,云服务器中项目连接数据库
  16. 超详细的AD8031ARZ介绍,就在这里
  17. 电子油门踏板/刹车踏板位置传感器
  18. 【无标题】类模板详解\n类模板的定义及实例化\ntemplate\u003Cclass 模板参数>\nclass 类名 {\n // 类定义\n};\n\ntemplate\u003Ctypen
  19. rtthread工业使用_基于RTThread 的LwIP使用讲解
  20. 英特尔旗下Mobileye纳斯达克上市:上涨38% 市值231亿美元

热门文章

  1. Java多线程案例——单例模式(恶汉模式和懒汉模式)
  2. OpenMP中的Reduction操作 #pragma omp xxx reduction()
  3. 用Python做个美少女大战小怪兽
  4. 在梦中写代码的程序员,比例居然这么高
  5. htc系统Android 7.1,这款HTC太强大,被誉为刷机之王,一路升到安卓7.1
  6. 【示波器专题】示波器探头不同的衰减比对测量的影响
  7. 视频mp4与m4v格式区别
  8. Possibly consider using a shorter maxLifetime value.解决方法
  9. 中俄边界上的田园综合体:被额尔古纳河环抱着的“世外桃源”
  10. bootstrap实战--微金所项目(导航栏)