Я считаю, что Python 3.1 по умолчанию будет печатать их лучше, без изменения кода. Но это бесполезно, если вы используете какие-либо расширения, которые не были обновлены для работы с Python 3.1
Классы ES2015 (или transpiled classes) - это просто синтаксический сахар над прототипным наследованием. Это означает, что методы, которые вы определяете, помещаются в прототип «класса». Чтобы иметь доступ к зависимостям, введенным в конструкторе, вам нужно как-то сохранить их для последующей ссылки методом прототипа.
Обычно это делается путем помещения их в экземпляр:
function HomeController($http) {
this.$http = $http;
}
HomeController.prototype.doMe = function() {
this.$http.get('http://www.yahoo.com/');
};
В синтаксисе на основе класса это означает:
class HomeController {
constructor($http) {
this.$http = $http;
}
doMe() {
this.$http.get('http://www.yahoo.com/');
}
}
EDIT: если вы используете TypeScript, вы можете сохранить некоторый шаблонный шаблон, используя модификаторы доступа в аргументах конструктора. Например:
class HomeController {
constructor(private $http) {}
}
... который является сокращением для:
class HomeController {
private $http;
contructor($http) {
this.$http = $http;
}
}
РЕДАКТИРОВАТЬ 2: Если вы хотите сделать ваш контроллер мини-дружественным, вы можете использовать один из вариантов, описанных здесь здесь (возможно, наряду с инструментом, подобным ngAnnotate ). Например, вы можете использовать метод «$inject
Property Annotation:
ES5
HomeController.$inject = ['$http'];
function HomeController($http) {...}
HomeController.prototype.doMe = function() {...}
ES2015
class HomeController {
constructor($http) {...}
doMe() {...}
}
HomeController.$inject = ['$http'];
// OR
class HomeController {
static get $inject() { return ['$http']; }
constructor($http) {...}
doMe() {...}
}
ТипScript
class HomeController {
static $inject = ['$http'];
constructor(private $http) {}
doMe() {...}
}
В конце я сделал:
controller: class {
constructor($http, Restangular, $state) {
Object.assign(this, {$http, Restangular, $state});
}
doMe() {
// use this.$http, this.Restangular & this.$state freely here
}
}
Класс должен иметь явную $inject
аннотацию для правильной оценки:
class HomeCtrl {
static get $inject() {
return ['$http'];
}
// or unstandardized shortcut:
// static $inject = ['$http'];
constructor($http) {
this.$http = $http;
}
doMe() {
this.$http...
}
}
static $inject = ['$http']
также можно добавить. – estus 16 December 2016 в 10:46