Comments 10
Не безопасно и не изящно, но в любом случае пост полезен, спасибо!
Существует какой-нибудь способ реализации protected свойств?
Забыли написать, что заниматься отладкой кода с приватными членами сложнее. Или вы такой ерундой не занимаетесь? ;-)
Классная идея с WeakMap + JS Class. Возьму себе на вооружение.
получается, что для каждого приватного свойства, создается отдельная WeakMap переменная и мне кажется это не практично, можно использовать следующий подход:
использовать так:
или даже так:
//private.js
'use strict';
export default function () {
var map = new WeakMap();
return (...args) => {
if (args.length === 2) {
return map.set(args[0], args[1]); //set private property
} else if (args.length === 1) {
return map.get(args[0]); //get private property
} else if (args.length === 3 && args[2]) {
return map.remove(args[0]); //remove private property
}
throw new Error(`Private scope storage called with wrong count of arguments: ${arguments.length}`);
};
};
использовать так:
//my-class.js
'use strict';
const $ = require('./private')();
export default class MyClass {
constructor(options) {
$(this, {
name: options.name
});
}
get name() {
return $(this).name;
}
}
или даже так:
//my-class.js
'use strict';
const $ = require('./private')();
export default class MyClass {
constructor(options) {
$(this, options || {});
}
get name() {
return $(this).name;
}
}
Sign up to leave a comment.
Управление приватными данными классов ES6