2017-10-07 4 views
0

私は、サブメニューコンテナがリンクコンテナの子または兄弟ではない、サブメニュー用の動作するjavascriptソリューションを持っています。私はプロトタイプパターンを実験しようとしています。だから私は、すでに動作しているコードをプロトタイプパターンに変換して、より読みやすいコードを取得しようとしています。現在は失敗しています。コンソールにエラーは表示されませんが、コードは機能しません。理解オブジェクト。プロトタイプパターン

jQuery(document).ready(function ($) { 
    function tg_dropdown(element) { 
     this.element = element; 
     this.mainNavigation = $('#top-menu'); 
     this.dropdownLink = this.mainNavigation.find('.has_dropdown'); 
     this.bindEvents(); 
} 

tg_dropdown.prototype.bindEvents = function() { 
    var $tg_megamenu__link = $('.tg-megamenu__link'), 
     self = this; 
    $tg_megamenu__link.mouseenter(function(event) { 
     self.showDropdown(); 
    }).mouseleave(function() { 
     setTimeout(function() { 
     if ($('#top-menu').find('.has-dropdown:hover').length == 0 && $('#main-header').find('.tg-submenu:hover').length == 0) 
     self.hideDropdown(); 
    }, 50); 
    }) 
}; 

tg_dropdown.prototype.showDropdown = function() { 
    $('body').addClass('test'); 
}; 

tg_dropdown.prototype.hideDropdown = function() { 
    $('body').removeClass('test'); 
} 
}); 

プロトタイプパターンのいくつかの基本的な基礎を監督することがあります。誰かが私を正しい方法に導いて、このことを働かせることができますか?

+1

あなたは 'tg_dropdown'クラスのインスタンスを作成していません。 'tg_dropdown'関数(クラスコンストラクタ)は決して呼び出されません。 – Titus

+1

作業中のインスタンスを取得するには、 'new tg_dropdown(element)'を呼び出す必要があります。 – ideaboxer

+0

JavaScriptの.prototypeはどのように動作するのですか?(https://stackoverflow.com/questions/572897/how-does-javascript-prototype-work) – ideaboxer

答えて

0

あなたが書いているのは、エンジンがtg_dropdownのメモリ空間を作るようにJSエンジンに指示しているため、関数を呼び出さないということです。

function tg_dropdown(element) { 
    this.element = element; 
    this.mainNavigation = $('#top-menu'); 
    this.dropdownLink = this.mainNavigation.find('.has_dropdown'); 
    this.bindEvents(); 
} 

あなたはtg_dropdownオブジェクトを作成するnewを使用することができます。

希望します。

関連する問題