Object.create用法
用法: 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用法的更多相关文章
- js创建对象 object.create()用法
Object.create()方法是ECMAScript 5中新增的方法,这个方法用于创建一个新对象.被创建的对象继承另一个对象的原型,在创建新对象时可以指定一些属性. 语法: Object.crea ...
- (转)es6中object.create()和object.assign()
今天学习javascript面向对象,在学习Obejct方法时了解到create方法,偶像想起之前使用的assign方法,顺带查找一番,感觉这篇博客讲解详细,遂转载. 先简单提一下装饰器函数,许多面向 ...
- 浅谈Object.create
在网上发现了Object.create的用法,感觉很是奇怪,所以学习记录下 var o = Object.create(null); console.log(o); // {} o.name = 'j ...
- 使用Object.create 克隆对象以及实现单继承
var Plane = function () { this.blood = 100; this.attack = 1; this.defense = 1; }; var plane = new Pl ...
- 【前端】js中new和Object.create()的区别
js中new和Object.create()的区别 var Parent = function (id) { this.id = id this.classname = 'Parent' } Pare ...
- 基本类型和引用类型调用是的区别(Object.create)
var person = { name : 'jim', address:{ province:'浙', city:'A' } } var newPerson = Object.create(pers ...
- Object.create() 和 __proto__ 的关系
经测试得出 Ojbect.create() 也就是通过修改 __proto__ 实现的. 例: var Super = { say: function() {console.log('say')} } ...
- Object.create
var emptyObject = Object.create(null); var emptyObject = Object.create(null); var emptyObject = {}; ...
- 使用 Object.create 创建对象,super 关键字,class 关键字
ECMAScript 5 中引入了一个新方法:Object.create().可以调用这个方法来创建一个新对象.新对象的原型就是调用 create 方法时传入的第一个参数: var a = {a: 1 ...
随机推荐
- ASP.NET MVC Web API 学习笔记---第一个Web API程序【转】
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html 1. Web API简单说明 近来很多大型的平台都公开了Web API. ...
- 【GLSL教程】(七)逐像素的光照 【转】
http://blog.csdn.net/racehorse/article/details/6662540 逐像素的方向光(Directional Light per Pixel) 这一节将把前面的 ...
- 2016.10.10 Failed to start component [StandardService[Catalina]]
Failed to start component [StandardService[Catalina]] 错误原因:有数据残留,点击clean(见下图) 解决办法: 右键点击servers下 ...
- leetcode第一刷_Word Search
这道题之前一直没敢做,没想到前天用递归一遍过了. . 当时为什么想着用递归,而不是dp呢.由于我想到达某个位置的情况有非常多,即使从当前位置開始的搜索是已知的,但之前的状态是如何的也无从得知啊,实话实 ...
- Leetcode 编程训练(转载)
Leetcode这个网站上的题都是一些经典的公司用来面试应聘者的面试题,很多人通过刷这些题来应聘一些喜欢面试算法的公司,比如:Google.微软.Facebook.Amazon之类的这些公司,基本上是 ...
- 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 ...
- C/C++中作用域详解(转)
作用域规则告诉我们一个变量的有效范围,它在哪儿创建,在哪儿销毁(也就是说超出了作用域).变量的有效作用域从它的定义点开始,到和定义变量之前最邻近的开括号配对的第一个闭括号.也就是说,作用域由变量所在的 ...
- win2012R2无法打开匿名级安全令牌
解决办法: 1.输入“dcomcnfg.exe”,打开组件服务管理. 2.展开组件服务,计算机,右击我的电脑,选择属性. 3.在默认属性选项卡中, 选择:- 勾选“在此计算机中启用分布式C ...
- Session对象失效的客户端解决方法
ASP(Active Server Pages)技术的Session对象用于存储用户在对话期间的私有信息.当前用户的Session对象中定义的变量和对象能在页面之间共享,但是不能为应用中其他用户所访问 ...
- android中使用百度定位sdk实时的计算移动距离
; //5秒刷新一次 private Handler refreshHandler = new Handler(){ //刷新界面的Handler public void handleMessag ...