zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    bzoj 1188 [HNOI2007]分裂游戏(SG函数,博弈)
    poj 3710 Christmas Game(树上的删边游戏)
    poj 1704 Georgia and Bob(阶梯博弈)
    110 最小路径和
    109 数字三角形
    63 搜索旋转排序数组II
    62 搜索旋转排序数组
    61 搜索区间
    58 四数之和
    关于初始值的问题
  • 原文地址:https://www.cnblogs.com/xsfx/p/7125504.html
Copyright © 2011-2022 走看看