2016-10-25 6 views
1

У меня есть следующий код, который работает, как ожидалось, но я не уверен, что это правильный путь:Каков правильный способ ссылки на свойства статического класса ES.next?

'use strict'; 

class Upload { 
    static uploadCount = 20; 

    constructor(props) { 
    Upload.uploadCount++; 
    } 

    static get count() { 
    return this.uploadCount; 
    } 
} 

const up1 = new Upload({ 
    name: 'Wow.pdf', 
    size: 123123, 
}); 

const up2 = new Upload({ 
    name: 'doit.pdf', 
    size: 9999999, 
}); 

console.log(Upload.count); 

Почему не constructor относятся к статическому вар через this.uploadCount как статический геттера может? Есть ли лучший/правильный способ отслеживания количества созданных объектов Upload?

+0

fwiw, at chromium 52 logs 'Uncaught SyntaxError: Неожиданный токен =', который, как представляется, указывает на статическую uploadCount = 20; '?. См. [Статические методы] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes#Static_methods) – guest271314

+1

Это нормально, я использую babel, а не полагаюсь на браузер, чтобы поддерживать Предложения ES6. – ffxsam

+1

Nit: не «предложение ES6», просто предложение синтаксиса для ECMAScript. – loganfsmyth

ответ

2

this в конструкторе относится к экземпляру объекта, который был только что создан. Статические свойства - это свойства самого конструктора, а не экземпляра. Итак, если вы хотите ссылаться на них из метода экземпляра, вы должны использовать имя конструктора, как в Upload.uploadCount.


FYI, синтаксис вы используете:

static uploadCount = 20; 

не является стандартной частью ES2015 и единственное место, которое я знаю наверняка, что это работает с Бабелем. Если вы хотите переносить код и не используете Babel, вы не должны использовать этот синтаксис. Вы можете перейти на старомодный:

Upload.uploadCount = 20; 

И положите это после определения класса и переносите его.


FYI, синтаксис используется для статических свойств предлагается для будущего пересмотра JS, но в прошлом я проверил это не было принято решение еще.

+0

Хорошо, это имеет смысл. Так что 'Upload.uploadCount' правильный способ ссылаться на статическое свойство из' constructor'? – ffxsam

+0

@ffxsam - Да, это было бы, как сделать это из любого места, который не является статическим методом. Поскольку статические методы ссылаются через имя класса, значение 'this' в статическом методе устанавливается на имя класса. – jfriend00

+0

Вы отредактировали свой пост так, как я прокомментировал :) Хорошо звучит хорошо, просто хотел убедиться, что я делаю это правильно. Благодаря! – ffxsam

Смежные вопросы