Проблема со свойством прототипа javascript - PullRequest
1 голос
/ 08 декабря 2010

У меня проблемы с попыткой заставить это работать.Я пытаюсь использовать шаблон наблюдателя.Я хочу иметь возможность запускать произвольное количество функций в событии select change.Я продолжаю получать сообщение об ошибке «Publisher.protoype» является нулевым или не является объектом.Что я делаю не так?

        function Publisher(){
            this.subscribers = [];
        }

        Publisher.protoype.deliver = function(data){
            this.subscribers.forEach(
                function(fn){
                    fn(data);
                }
            );
            return this;
        }

        Function.prototype.subscribe = function(publisher){
            var that = this;
            var AlreadyExists = publisher.subscribers.some(
                function(el){
                    if (el == that){
                        return;
                    }
                }
            );
            if(!AlreadyExists){
                publisher.subscribers.push(this);
            }
            return this;
        }

        Function.prototype.unsubscribe = function(publisher){
            var that = this;
            publisher.subscribers = publisher.subscribers.filter(
                function(el){
                    if(el != that){
                        return el;
                    }
                }
            );
            return this;
        }
        var EventPublisher = new Publisher();      
        var SelectChange = function(data){alert("hello")};
        SelectChange.subscribe(EventPublisher);
        function onSelectChange(oSelect){
            EventPublisher.deliver(oSelect);
        }

    </script>

</head>

<body>
    <form name="Tester" action="Tester" method="post" enctype="application/x-www-form-urlencoded">
        <select name="selecter" onchange="Javascript:onSelectChange(this)">
            <option name="Shane" value="Shane">
                Shane
            </option>

            <option name="Shane2" value="Shane2">
                Shane2
            </option>
        </select><input type="submit"><input type="reset">
    </form>
</body>
</html>

Ответы [ 2 ]

2 голосов
/ 08 декабря 2010

У вас есть опечатка: Publisher.protoype.deliver отсутствует 't'.

0 голосов
/ 08 декабря 2010

Publisher.protoype определенно ноль или не объект. Возможно, вы хотели набрать Publisher.prototype.

...