首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ECMAScript 6中的原型链

ECMAScript 6中的原型链
EN

Stack Overflow用户
提问于 2015-06-02 15:08:02
回答 1查看 990关注 0票数 5

我最近看到了阿克塞尔·劳施梅耶博士写的这篇伟大的文章

http://www.2ality.com/2015/02/es6-classes-final.html

下面的片段大致描述了ECMAScript 6原型链是如何从ECMAScript 5的角度来工作的(原始文章的第4.2节):

代码语言:javascript
复制
// ECMAScript 6
class Point {
    constructor(x, y) {
        this.x = x;
        this.y = y;
    }
    ···
}

class ColorPoint extends Point {
    constructor(x, y, color) {
        super(x, y);
        this.color = color;
    }
    ···
}

let cp = new ColorPoint(25, 8, 'green');

ECMAScript 5中的“罩下”视图:

代码语言:javascript
复制
 // ECMAScript 5
 // Instance is allocated here
function Point(x, y) {
    // Performed before entering this constructor:
    this = Object.create(new.target.prototype);

    this.x = x;
    this.y = y;
}
···

function ColorPoint(x, y, color) {
    // Performed before entering this constructor:
    this = uninitialized;

    this = Reflect.construct(Point, [x, y], new.target); // (A)
        // super(x, y);

    this.color = color;
}
Object.setPrototypeOf(ColorPoint, Point);
···

let cp = Reflect.construct( // (B)
             ColorPoint, [25, 8, 'green'],
             ColorPoint);
    // let cp = new ColorPoint(25, 8, 'green');

虽然在上面的代码中,我理解这是有效的:

代码语言:javascript
复制
Object.getPrototypeOf(ColorPoint) === Point  //true

正因如此:

代码语言:javascript
复制
Object.setPrototypeOf(ColorPoint, Point);

我很难理解为什么这也是真的,因为我找不到任何"ES5“的解释:

代码语言:javascript
复制
Object.getPrototypeOf(ColorPoint.prototype) === Point.prototype   // true

也许像这样的台词少了..?

代码语言:javascript
复制
Object.setPrototypeOf(ColorPoint.prototype, Point.prototype);

先谢谢大家。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-06-02 15:32:19

ES5透视图中的“底层视图”不包括这些行--它隐藏在...部分中。这段代码的目的是解释与ES5继承的区别,这与this初始化、new.targetsuper行为和从其他构造函数继承的构造函数有关。

原型的基本ES5继承仍然存在,并且工作方式与往常一样:

代码语言:javascript
复制
ColorPoint.prototype = Object.create(Point.prototype, {
    constructor: {value:ColorPoint, writable:true, enumerable:false, configurable:true}
});
// ... further method definitions
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30599857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档