Вызывающий метод с помощью прототипа JavaScript

Вы можете использовать синтаксис объекта и инкапсулировать ваши стили

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

128
задан Foreever 15 March 2017 в 15:32
поделиться

5 ответов

Я не понял то, что точно Вы пытаетесь сделать, но обычно реализуете определенное для объекта поведение, сделан вдоль этих строк:

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...*/);
}
200
ответ дан 24 November 2019 в 00:38
поделиться

Нет, необходимо было бы дать, действительно функционируют в конструкторе, и действительно функционируют в прототипе различные имена.

0
ответ дан 24 November 2019 в 00:38
поделиться

Хорошо один способ сделать это сохранил бы базовый метод и затем назвал бы его из переопределенного метода, как так

MyClass.prototype._do_base = MyClass.prototype.do;
MyClass.prototype.do = function(){  

    if (this.name === 'something'){

        //do something new

    }else{
        return this._do_base();
    }

};
24
ответ дан 24 November 2019 в 00:38
поделиться

Если я понимаю правильно, Вы хотите, чтобы Базовая функциональность всегда была выполнена, в то время как часть ее нужно оставить реализациям.

Вам можно было бы помочь' шаблонный метод ' шаблон разработки.

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 */ }
2
ответ дан 24 November 2019 в 00:38
поделиться

Я боюсь, что Ваш пример не работает способ, которым Вы думаете. Эта часть:

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: хорошие части .

16
ответ дан 24 November 2019 в 00:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: