Object.create
Object.create(proto [, propertiesObject ])
通过指定的原型对象和属性创建一个新的对象.
proto:原型对象
propertiesObject:可选属性,也是可配置的,如下:
var obj = Object.create({}, {'a':{'value': 1, 'writable': false, 'enumerable': false, 'configurable': false}});
其中,第二个参数中, 是一个较为特殊的为obj添加属性的方式;其中四个值所代表的含义分别为:
value: 表示a 的属性值;
writable: 表示a 的属性值是否可写;[默认为: false]
enumerable: 表示属性a 是否可以被枚举;[默认为: false]
configurable: 表示属性a 是否可以被配置,例如 对obj.a做 delete操作是否允许;[默认为: false]
Classical inheritance with Object.create
//Shape - superclass function Shape() { this.x = 0; this.y = 0; } //superclass method Shape.prototype.move = function(x, y) { this.x += x; this.y += y; console.info("Shape moved."); }; // Rectangle - subclass function Rectangle() { Shape.call(this); //call super constructor. } //subclass extends superclass Rectangle.prototype = Object.create(Shape.prototype); Rectangle.prototype.constructor = Rectangle; var rect = new Rectangle(); rect instanceof Rectangle //true. rect instanceof Shape //true. rect.move(1, 1); //Outputs, "Shape moved."
If you wish to inherit from multiple objects, then mixins are a possibility.
function MyClass() { SuperClass.call(this); OtherSuperClass.call(this); } MyClass.prototype = Object.create(SuperClass.prototype); //inherit mixin(MyClass.prototype, OtherSuperClass.prototype); //mixin MyClass.prototype.myMethod = function() { // do a thing };
Using <propertiesObject> argument with Object.create
var o; // create an object with null as prototype o = Object.create(null); o = {}; // is equivalent to: o = Object.create(Object.prototype); // Example where we create an object with a couple of sample properties. // (Note that the second parameter maps keys to *property descriptors*.) o = Object.create(Object.prototype, { // foo is a regular "value property" foo: { writable:true, configurable:true, value: "hello" }, // bar is a getter-and-setter (accessor) property bar: { configurable: false, get: function() { return 10 }, set: function(value) { console.log("Setting `o.bar` to", value) } }}) function Constructor(){} o = new Constructor(); // is equivalent to: o = Object.create(Constructor.prototype); // Of course, if there is actual initialization code in the Constructor function, the Object.create cannot reflect it // create a new object whose prototype is a new, empty object // and a adding single property 'p', with value 42 o = Object.create({}, { p: { value: 42 } }) // by default properties ARE NOT writable, enumerable or configurable: o.p = 24 o.p //42 o.q = 12 for (var prop in o) { console.log(prop) } //"q" delete o.p //false //to specify an ES3 property o2 = Object.create({}, { p: { value: 42, writable: true, enumerable: true, configurable: true } });
针对不支持Object.create的浏览器,可使用以下函数:
if (!Object.create) { Object.create = function (o) { if (arguments.length > 1) { throw new Error('Object.create implementation only accepts the first parameter.'); } function F() {} F.prototype = o; return new F(); }; }
相关推荐
离线安装包,亲测可用
jquery-ui.min.js 1.8.5
离线安装包,亲测可用
ruby-1.8.5-24.el5.x86_64.rpm
标题中的"utorrent[1].v1.8.5.bjtu.new.exe"指的是μTorrent的一个特定版本,μTorrent是一款非常流行的BitTorrent客户端软件。它主要用于下载和分享大型文件,如电影、音乐、软件和游戏,通过P2P(点对点)技术实现...
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
在使用spring mvc时,ajax传输json格式的数据时,@ResponseBody, 会出现406错误,导入此包可解决,或者导入jackson-core-asl-1.9.13+jackson-mapper-asl-1.9.13jar
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
TortoiseSVN-1.8.4.24972-x64-svn-1.8.5 中文语言包64位
离线安装包,亲测可用
离线安装包,亲测可用
官方离线安装包,亲测可用
这个版本号1.8.5的更新可能包含了一些性能优化、新特性的添加或已有问题的修复。下面将详细探讨该源码包中的关键知识点。 1. **微信小程序**:微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,用户无需下载...
Subclipse 1.8.5是这个插件的一个特定版本,可能包含了一些性能优化、新功能或对Eclipse和SVN的兼容性改进。 "site-1.8.x"文件是Subclipse的离线安装站点,它是Eclipse插件安装的一种形式。这种站点包含了插件的...
svn客户端工具(小乌龟) TortoiseSVN-1.8.4.24972-x64-svn-1.8.5.msi 命令行工具 Slik-Subversion-1.8.5-x64.msi 环境变量配置 有问题的童鞋可以留言,大家共同学习!
官方离线安装包,亲测可用
官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装
离线安装包,亲测可用
TortoiseSVN为用户提供了一系列的特性,包括但不限于: - 图标重载,以直观方式展示文件状态; - 强大的右键菜单支持,在资源管理器中直接进行版本控制操作; - 支持拖放操作,简化了文件的版本控制流程; - 配置...