You cannot change a property of a namefunction. The descriptor says this is not writable...
var BaseClass = function (data) {
Object.assign(this, data);
};
console.log(Object.getOwnPropertyDescriptor(BaseClass, 'name'));
Run codeHide resultBut since this configurable, you can use Object.defineProperty().
var BaseClass = function (data) {
Object.assign(this, data);
};
Object.defineProperty(BaseClass, 'name', {
writable: true,
value: 'Foo'
});
console.log(BaseClass.name);
Run codeHide result
EDIT
! ... , , . , ES5 .
ExtendedClass.prototype = Object.create(BaseClass); - , . , ExtendedClass . , , .
function BaseClass(data) {
console.log(this instanceof BaseClass);
console.log(this instanceof Function);
console.log(this.name);
Object.assign(this, data);
}
function ExtendedClass() {
BaseClass.apply(this, arguments);
}
ExtendedClass.prototype = Object.create(BaseClass);
new ExtendedClass({ type: 'foo' });
Hide resultthis BaseClass. ...
, JavaScript :
ExtendedClass.prototype = Object.create(BaseClass.prototype);
ExtendedClass.prototype.constructor = ExtendedClass;
:
function BaseClass(data) {
console.log(this instanceof BaseClass);
console.log(this instanceof Function);
console.log(this.name);
Object.assign(this, data);
}
function ExtendedClass() {
BaseClass.apply(this, arguments);
}
ExtendedClass.prototype = Object.create(BaseClass.prototype);
ExtendedClass.prototype.constructor = ExtendedClass;
var instance = new ExtendedClass({ name: 'foo' });
console.log(instance.name);
console.log(BaseClass.name);
console.log(ExtendedClass.name);
Hide result