Это может быть возможным, если в es2015
с помощью proxy
«s handler.set, это ловушка для установки значения свойства, так что вы можете использовать его, чтобы проверить, является ли свойство собирается установить внешнее или нет.
Обновлено для удовлетворения запроса, что ожидает, что свойства будут заданы с помощью конструктора.
Однако, может быть больше подходит для использования Dmitri Pavlutin's answer, не знал этого, тоже выучил урок.
X = function(props){
// Copy properties if given an input object
if (attrs instanceof Object) {
var key;
for (key in props) {
if (attrs.hasOwnProperty(key)) {
this[key] = props[key];
}
}
}
// Wrap a proxy.
return new Proxy(this, {
set: function(target, property, value, receiver) {
// Anyway that check if property to set is an external one.
if (typeof target[property] === 'undefined') {
console.log("No");
} else {
target[property] = value;
}
return true;
}
})
};
i1=new X({a: 1, b: 2});
i1.c=3;
console.log(i1);
i1.a= 2;
console.log(i1);
Вы не можете этого сделать. – epascarello
Вы хотите, чтобы кто-то мог сделать 'i1.c = 3;' или вы хотите разрешить 'i1.c = 3;', так что 'console.log (i1.c)' будет показывать '3', но скрыть его в 'console.log (i1)'? –
Мне очень жаль, но вы можете перепроверить мой пост, когда я редактировал вопрос. –