Единый интерфейс для различных устройств (веб, смарт-ТВ, планшет, мобильный)


Мы поставляем контент для различных устройств - веб, смарт-ТВ, планшетных и мобильных - и я пытаюсь обеспечить общий интерфейс JavaScript, предоставляя такие функции, как играть, трансляция, оповещение, журналов и т. д., не думая о том, как устройство на самом деле делать это.

Мой вопрос: есть ли способ, чтобы представить это как интерфейс, что устройство может осуществлять и гарантировать, что все реализации следуют этому фирменный интерфейс?

Пример реализации типовых функций в отношении веб-браузера на ПК:

    $.extend({
        Device : function() {

            this.play = function(url){
                console.log("Play: " + url);
            }

            this.alert = function(title, message, buttonText) {
                alert(title + "\n" + message);
            }

            this.log = function(message){
                console.log(message);
            }

            this.error = function(message){
                console.error(message);
            }
        }
    });

Те же функции против samsung ТВ

$.extend({
    Device : function() {
        var that = this;

        var TV = new $.TV();
        TV.init();

        this.play = function(url){
            TV.play(url);
            that.log("Play: " + url);
        }

        this.alert = function(title, message, buttonText) {
            alert(title + "\n" + message);
        }

        this.log = function(message){
            //no console on tv, so have to include on in the html
            $("#console").append('<div class="console-log">' + message + '</div>');
            if($("#console").children().size()>=5){
                $("#console").children().first().remove();
            }
        }

        this.error = function(message){                
            $("#console").append('<div class="console-error">' + message + '</div>');
            if($("#console").children().size()>=5){
                $("#console").children().first().remove();
            }
        }
    }
});


300
-1
задан 28 октября 2011 в 11:10 Источник Поделиться
Комментарии
1 ответ

Конечно же, есть. Они называются прототипами.

Вы использовать прототипное наследование.

(Использует .новые и объекта.сделать , потому что прототипы немного некрасиво иначе)

// Device prototype
var Device = {
play: function(url){
console.log("Play: " + url);
},
alert: function(title, message, buttonText) {
alert(title + "\n" + message);
},
log: function(message){
console.log(message);
},
error: function(message){
console.error(message);
}
};

var TVDevice = Object.make(Device, {
constructor: function () {
this.TV = new $.TV();
this.TV.init();
},
play: function (url) {
Device.play.apply(this, arguments);
this.TV.play(url);
},
log: function (message) {
//no console on tv, so have to include on in the html
$("#console").append('<div class="console-log">' + message + '</div>');
if($("#console").children().size()>=5){
$("#console").children().first().remove();
}
},
error: function(message){
$("#console").append('<div class="console-error">' + message + '</div>');
if($("#console").children().size()>=5){
$("#console").children().first().remove();
}
}
});

var tvDevice = TVDevice.new();

1
ответ дан 28 октября 2011 в 11:10 Источник Поделиться