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

原文地址:http://www.cnblogs.com/yupeng/p/3478069.html

1.Object.create() 是什么?

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

  例如: 

 1 function Car (desc) {
 2     this.desc = desc;
 3     this.color = "red";
 4 }
 5
 6 Car.prototype = {
 7     getInfo: function() {
 8       return ‘A ‘ + this.color + ‘ ‘ + this.desc + ‘.‘;
 9     }
10 };
11 //instantiate object using the constructor function
12 var car =  Object.create(Car.prototype);
13 car.color = "blue";
14 alert(car.getInfo());

结果为:A blue undefined.

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

 数据属性

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

 访问属性:

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

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

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4     <title>yupeng‘s document </title>
 5     <meta charset="utf-8"/>
 6 </head>
 7 <body>
 8     <script type="text/javascript">
 9
10         var obj = {
11
12             a:function(){
13                 console.log(100)
14             },
15             b:function(){
16                 console.log(200)
17             },
18             c:function(){
19                 console.log(300)
20             }
21
22         }
23
24         var newObj = {};
25
26         newObj = Object.create(obj,{
27             t1:{
28                 value:‘yupeng‘,
29                 writable:true
30             },
31             bar: {
32                 configurable: false,
33                 get: function() { return bar; },
34                 set: function(value) { bar=value }
35             }
36
37         })
38
39         console.log(newObj.a());
40         console.log(newObj.t1);
41         newObj.t1=‘yupeng1‘
42         console.log(newObj.t1);
43         newObj.bar=201;
44         console.log(newObj.bar)
45
46         function Parent() { }
47         var parent = new Parent();
48         var child = Object.create(parent, {
49               dataDescriptor: {
50                 value: "This property uses this string as its value.",
51                 writable: true,
52                 enumerable: true
53               },
54               accessorDescriptor: {
55                 get: function () { return "I am returning: " + accessorDescriptor; },
56                 set: function (val) { accessorDescriptor = val; },
57                 configurable: true
58               }
59             });
60
61         child.accessorDescriptor = ‘YUPENG‘;
62         console.log(child.accessorDescriptor);
63
64
65
66         var Car2 = function(){
67             this.name = ‘aaaaaa‘
68         } //this is an empty object, like {}
69         Car2.prototype = {
70           getInfo: function() {
71             return ‘A ‘ + this.color + ‘ ‘ + this.desc + ‘.‘;
72           }
73         };
74
75         var newCar = new Car2();
76
77         var car2 = Object.create(newCar, {
78           //value properties
79           color:   { writable: true,  configurable:true, value: ‘red‘ },
80           //concrete desc value
81           rawDesc: { writable: true, configurable:true, value: ‘Porsche boxter‘ },
82           // data properties (assigned using getters and setters)
83           desc: {
84             configurable:true,
85             get: function ()      { return this.rawDesc.toUpperCase();  },
86             set: function (value) { this.rawDesc = value.toLowerCase(); }
87           }
88         });
89         car2.color = ‘blue‘;
90         console.log(car2.getInfo());
91         car2.desc = "XXXXXXXX";
92         console.log(car2.getInfo());
93         console.log(car2.name);
94
95
96
97     </script>
98 </body>
99 </html>

结果为:

100

yupeng

yupeng1

201

I am returning: YUPENG

A blue PORSCHE BOXTER.

A blue XXXXXXXX.

aaaaaa

时间: 2024-12-28 00:54:16

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

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

面向对象-对象创建方式总结 1. 创建对象的方式,json方式 推荐使用的场合: 作为函数的参数,临时只用一次的场景.比如设置函数原型对象. 1 var obj = {}; 2 //对象有自己的 属性 和 行为 3 // 属性比如: 年龄.姓名.性别 4 // 行为: 吃饭.睡觉.走路.讲课等... 动作 5 var obj2 = { 6 name: 'laoma', 7 age: 18, 8 sayHi: function(){ 9 console.log( name + 'say hi' )

转: .NET MVC3 几种返回 JSON 对象的方式和注意事项

.NET MVC3 几种返回 JSON 对象的方式和注意事项 转自:http://blog.csdn.net/xxj_jing/article/details/7382589 引言在用 .NET MVC3 给我们做 WEB 项目带来很大灵活性同时,对刚上手的同学来说有些细微的设置导致的问题让我们相当的“纠结”! 这里要讨论的就是:使用JQuery的 Ajax 请求后“返回”的JSON 数据问题. 相信大多数同学都会遇到过,就是在后台已经拼接好了一(拼接方法比较多,我的博客也有提到过!)串标准的J

js之对象创建方式

js中对象创建方式有多种,最常见的就是调用Object构造函数,下面我们来列举对象的创建的方式 一.Object构造 var Dog = new Object(); Dog.name = "peter"; Dog.bark =function(){ console.log(" my name is "+Dog.name); } Dog.bark();//输出my name is peter 此方法是最常见的生成方式,但不能指定想要的对象类型 二.字面量构造 var

WebKit JavaScript Binding添加新DOM对象的三种方式

一.基础知识 首先WebKit IDL并非完全遵循Web IDL,只是借鉴使用.WebKit官网提供了一份说明(WebKitIDL),比如Web IDL称"operation”(操作), 而WebKitIDL称为"method"(方法), 另外Web IDL也不像WebKitIDL那样将属性和参数分开. 为JavaScript绑定对象,可以使用module来定义所从属的模组. 典型的module包括: core, window, event, traversal, range

奇葩的对象创建方式(更新中)

1.日志对象的创建方式 public static final Logger  log =Logger.getLogger(需要产生日志文件的class对象); 2.httpClient对象的创建方式 CloseableHttpClient httpclient = HttpClients.createDefault(); 3.获取一个Http返回的对象 CloseableHttpResponse response = httpClient.execute(get);

【cocos2d-x 学习笔记 02】对象创建方式比较

1. 创建对象实例的方式比较 cocos2d-x中获取对象实例的方式与一般的C++编程方式有些不同,下面就是一段代码,比较了对象的创建.初始化和销毁过程二者不同的编写方式: 一般C++对象创建代码: Object *obj = new Object(arg1, arg2); delete obj; 一般C++对象在其构造函数中完成初始化操作,同时new出来的对象需要自己负责释放. cocos2d-x中对象创建代码: Object *obj = Object::create(); cocos2d-

JavaScript 3种内置对象

前面我们学了对象,如何创建对象及使用对象. 内置对象不需要实例化,就可以使用. 可以通俗地理解,在内存里的东东是对象,也就是实例化好的.在磁盘里的东东是类,需要实例化才能使用.实例化后的东东在内存里.未实例化的东东在磁盘里. 接下来我们学习三组已经创建好的对象,且这3组对象在日常工作中使用频率非常高. 这3组对象是: 1.浏览器对象模型 2.文档对象模型 3.全局JavaScript对象 一 浏览器对象模型 浏览器对象模型用于创建浏览器窗口的模型. 最顶端是window对象. window对象对

一种新的人机交流方式——sound ware 声件

以下为作者牛刀小试,如有不好之处希望大家指正,谢谢 :) 关于sound ware sound ware,声件:顾名思义,声音软件.就sound ware来说,它的本质就是软件,不同于一般的手机app,或者是电脑中的software:sound ware是一种侧重于声音交互的软件. sound ware最大的特性就是,以声音交互来代替传统图形界面交互的软件. sound ware声件有什么用? *sound ware的交互架构特别适合可穿戴式智能设备,智能家居,智能车载等智能设备 *sound

C++四种不同的对象生存方式

在C++中,有四种方法产生一个对象. 第一种方法是在堆栈(stack)之中产生: void MyFunc() { CFoo foo;//在堆栈(stack)中产生foo对象 } 第二种方法是在堆(heap)中产生它: void MyFunc() { CFoo* pFoo=new CFoo();//在堆(heap)中产生对象 } 第三种方法是产生一个全局对象(同时也必然是个静态对象) CFoo foo;//在任何函数范围外做此操作 第四种方法是产生一个局部静态对象 void CMyFunc() {