用法: Object.create(object, [,propertiesObject])

创建一个新对象,继承object的属性,可添加propertiesObject添加属性,并对属性作出详细解释(此详细解释类似于defineProperty第二个参数的结构)

var banana= {
color: 'yellow',
getColor: function(){
return this.color
}
}
//创建对象sub_banana
var sub_banana= Object.create(banana)
console.log(sub_banana.color) //yellow
console.log(sub_banana.getColor()) //yellow

添加propertiesObject

"use strict"
var banana= {
color: 'yellow',
getColor: function(){
return this.color
}
}
var sub_banana= Object.create(banana, {
  //添加taste属性
taste: {
    //详细解释
writeable: false,
get: function(){
console.log('getTaste')
return 'good'
}
},
  //添加weight
  weight: {
    value: 600
  }
})
console.log(sub_banana.color)
console.log(sub_banana.getColor()) console.log(sub_banana.taste) //good
console.log(sub_banana.weight) //600
sub_banana.taste= 'bad' //报错,writeable为false不可改变

此方法也常用于创建对象实例

function theSuper(_a){
this.a= 100
}
theSuper.prototype.getA= function(){
return this.a
}
//继承prototype
var sub1= Object.create(theSuper.prototype)
//继承prototype而不是构造函数内的值
console.log(sub1.a) //undefined
sub1.a= 100
console.log(sub1.getA()) //100

那么,此方法与new obj()的区别在哪?

Object.create的实现核心代码:

Object.create =  function (o) {
var F = function () {};
F.prototype = o;
return new F();
};

可见: 创建函数,将传递的对象赋给函数的prototype,再返回函数实例。

new obj()的核心实现代码:

var o1 = new Object();
o1.[[Prototype]] = Base.prototype;
Base.call(o1);

创建对象,将被继承对象的prototype赋给此对象,并且调用被继承对象的方法来为其初始化。(因此new obj()不仅能继承prototype,也能继承构造函数内属性)

Object.create用法的更多相关文章

  1. js创建对象 object.create()用法

    Object.create()方法是ECMAScript 5中新增的方法,这个方法用于创建一个新对象.被创建的对象继承另一个对象的原型,在创建新对象时可以指定一些属性. 语法: Object.crea ...

  2. (转)es6中object.create()和object.assign()

    今天学习javascript面向对象,在学习Obejct方法时了解到create方法,偶像想起之前使用的assign方法,顺带查找一番,感觉这篇博客讲解详细,遂转载. 先简单提一下装饰器函数,许多面向 ...

  3. 浅谈Object.create

    在网上发现了Object.create的用法,感觉很是奇怪,所以学习记录下 var o = Object.create(null); console.log(o); // {} o.name = 'j ...

  4. 使用Object.create 克隆对象以及实现单继承

    var Plane = function () { this.blood = 100; this.attack = 1; this.defense = 1; }; var plane = new Pl ...

  5. 【前端】js中new和Object.create()的区别

    js中new和Object.create()的区别 var Parent = function (id) { this.id = id this.classname = 'Parent' } Pare ...

  6. 基本类型和引用类型调用是的区别(Object.create)

    var person = { name : 'jim', address:{ province:'浙', city:'A' } } var newPerson = Object.create(pers ...

  7. Object.create() 和 __proto__ 的关系

    经测试得出 Ojbect.create() 也就是通过修改 __proto__ 实现的. 例: var Super = { say: function() {console.log('say')} } ...

  8. Object.create

    var emptyObject = Object.create(null); var emptyObject = Object.create(null); var emptyObject = {}; ...

  9. 使用 Object.create 创建对象,super 关键字,class 关键字

    ECMAScript 5 中引入了一个新方法:Object.create().可以调用这个方法来创建一个新对象.新对象的原型就是调用 create 方法时传入的第一个参数: var a = {a: 1 ...

随机推荐

  1. ASP.NET MVC Web API 学习笔记---第一个Web API程序【转】

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html 1. Web API简单说明 近来很多大型的平台都公开了Web API. ...

  2. 【GLSL教程】(七)逐像素的光照 【转】

    http://blog.csdn.net/racehorse/article/details/6662540 逐像素的方向光(Directional Light per Pixel) 这一节将把前面的 ...

  3. 2016.10.10 Failed to start component [StandardService[Catalina]]

    Failed to start component [StandardService[Catalina]] 错误原因:有数据残留,点击clean(见下图)     解决办法: 右键点击servers下 ...

  4. leetcode第一刷_Word Search

    这道题之前一直没敢做,没想到前天用递归一遍过了. . 当时为什么想着用递归,而不是dp呢.由于我想到达某个位置的情况有非常多,即使从当前位置開始的搜索是已知的,但之前的状态是如何的也无从得知啊,实话实 ...

  5. Leetcode 编程训练(转载)

    Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google.微软.Facebook.Amazon之类的这些公司,基本上是 ...

  6. Unique Binary Search Trees I&II——给定n有多少种BST可能、DP

    Given n, how many structurally unique BST's (binary search trees) that store values 1...n? For examp ...

  7. C/C++中作用域详解(转)

    作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域).变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号.也就是说,作用域由变量所在的 ...

  8. win2012R2无法打开匿名级安全令牌

    解决办法:  1.输入“dcomcnfg.exe”,打开组件服务管理. 2.展开组件服务,计算机,右击我的电脑,选择属性. 3.在默认属性选项卡中,      选择:- 勾选“在此计算机中启用分布式C ...

  9. Session对象失效的客户端解决方法

    ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息.当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问 ...

  10. android中使用百度定位sdk实时的计算移动距离

    ;   //5秒刷新一次 private Handler refreshHandler = new Handler(){ //刷新界面的Handler public void handleMessag ...