Вы можете использовать синтаксис объекта и инкапсулировать ваши стили
const style1 = {
position: 'absolute',
width: '100%',
height: '100%',
left: '0',
top:'0',
zIndex: '10000'
}
element.id = 'element';
element.style = style1;
Затем вы можете делать такие вещи, как использовать этот объект в качестве объекта базовых стилей и заменять значения, используя синтаксис es6, т. Е.
newStyles = {
...styles,
width: '30%',
height: '30%',
}
Document API не позволяет создавать цепочки, как вы предлагаете, если ваша цель состоит в том, чтобы уменьшить количество строк кода, вышеупомянутое решение позволит это сделать ваш код многократно используемым и расширяемым;
[116 ] https://developer.mozilla.org/en-US/docs/Web/API/Document
Я не понял то, что точно Вы пытаетесь сделать, но обычно реализуете определенное для объекта поведение, сделан вдоль этих строк:
function MyClass(name) {
this.name = name;
}
MyClass.prototype.doStuff = function() {
// generic behaviour
}
var myObj = new MyClass('foo');
var myObjSpecial = new MyClass('bar');
myObjSpecial.doStuff = function() {
// do specialised stuff
// how to call the generic implementation:
MyClass.prototype.doStuff.call(this /*, args...*/);
}
Нет, необходимо было бы дать, действительно функционируют в конструкторе, и действительно функционируют в прототипе различные имена.
Хорошо один способ сделать это сохранил бы базовый метод и затем назвал бы его из переопределенного метода, как так
MyClass.prototype._do_base = MyClass.prototype.do;
MyClass.prototype.do = function(){
if (this.name === 'something'){
//do something new
}else{
return this._do_base();
}
};
Если я понимаю правильно, Вы хотите, чтобы Базовая функциональность всегда была выполнена, в то время как часть ее нужно оставить реализациям.
Вам можно было бы помочь' шаблонный метод ' шаблон разработки.
Base = function() {}
Base.prototype.do = function() {
// .. prologue code
this.impldo();
// epilogue code
}
// note: no impldo implementation for Base!
derived = new Base();
derived.impldo = function() { /* do derived things here safely */ }
Я боюсь, что Ваш пример не работает способ, которым Вы думаете. Эта часть:
this.do = function(){ /*do something*/ };
перезаписи определение
MyClass.prototype.do = function(){ /*do something else*/ };
Начиная с недавно созданного объекта уже имеет, "делают" свойство, это не ищет prototypal цепочку.
классическая форма наследования в JavaScript является awkard, и трудно схватить. Я предложил бы использовать Douglas Crockfords простой шаблон наследования вместо этого. Как это:
function my_class(name) {
return {
name: name,
do: function () { /* do something */ }
};
}
function my_child(name) {
var me = my_class(name);
var base_do = me.do;
me.do = function () {
if (this.name === 'something'){
//do something new
} else {
base_do.call(me);
}
}
return me;
}
var o = my_child("something");
o.do(); // does something new
var u = my_child("something else");
u.do(); // uses base function
, По-моему, намного более ясный способ обработать объекты, конструкторов и наследование в JavaScript. Можно читать больше в Crockfords Javascript: хорошие части .