003
来源:互联网 发布:淘宝网店如何转让 编辑:程序博客网 时间:2024/05/18 03:35
下面这段代码使用的就是典型的“原型风格”:
function Foo(name) { this.name = name;}Foo.prototype.myName = function () { return this.name;}; function Bar(name, label) { Foo.call(this, name); this.label = label;}// 我们创建了一个新的 Bar.prototype 对象并关联到 Foo.prototypeBar.prototype = Object.create(Foo.prototype);// 注意!现在没有 Bar.prototype.constructor 了// 如果你需要这个属性的话可能需要手动修复一下它Bar.prototype.myLabel = function () { return this.label;};var a = new Bar("a", "obj a");a.myName(); // "a"a.myLabel(); // "obj a"
注意,下面这两种方式是常见的错误做法,实际上它们都存在一些问题:
// 和你想要的机制不一样!Bar.prototype = Foo.prototype;// 基本上满足你的需求,但是可能会产生一些副作用 :(Bar.prototype = new Foo();
我们来对比一下两种把 Bar.prototype 关联到 Foo.prototype 的方法:
// ES6 之前需要抛弃默认的 Bar.prototypeBar.ptototype = Object.create(Foo.prototype);// ES6 开始可以直接修改现有的 Bar.prototypeObject.setPrototypeOf(Bar.prototype, Foo.prototype);
如果忽略掉 Object.create(..) 方法带来的轻微性能损失(抛弃的对象需要进行垃圾回
收),它实际上比 ES6 及其之后的方法更短而且可读性更高。不过无论如何,这是两种完
全不同的语法
阅读全文
0 0
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 003
- 服务读写分离架构,绝不推荐
- 【零基础】带你学C带你飞
- springmvc 交互异常
- 测试小白禅道的软件环境搭建基础案例分享
- IIS+PHP上传数据大小限制
- 003
- 机器学习API文档(演示) (一)监督学习
- 数据结构课程设计————内部排序性能分析
- [算法分析与设计] leetcode 每周一题: Kth Smallest Element in a BST
- JavaEE颠覆者:spring-boot实战随书源码
- 封装OkHttp
- 小程序项目复制注意事项个人笔记
- Java-NIO(三):直接缓冲区与非直接缓冲区
- 【Codeforces183D】T-shirt