Взгляни на скрипке hereOO JavaScript обходя .call
В функции шоу вызова метода JavaScript используются для this
относится к переменной container
в моем объекте ContactForm. Я думаю, я не слишком уверен в магии, которая делает эту работу. Может ли кто-нибудь выяснить, почему это работает, и какая хорошая альтернатива может быть?
JS
$(document).ready(function() {
var contactForm = {
container: $('#contact'),
config: {
effect: 'slideToggle',
speed: 400
},
/*******************/
init: function (config) {
$.extend(this.config, config);
$('<button>').text('Contact me')
.attr('type', 'button')
.insertAfter('#firstArticle')
.on('click', this.show);
//currently only logic on the close button
},
/*******************/
show: function() {
//using variable names to shorten up
var cf = contactForm,
container = cf.container,
config = cf.config;
if (container.is(':hidden')) {
cf.close.call(container);
container[config.effect](config.speed);
}
},
/*******************/
close: function() {
var self = $(this);
if (self.find('span.close').length) {
return;
}
$('<span>').addClass('close')
.text('close')
.prependTo(this)
.on('click', function() {
//self= span
self[contactForm.config.effect](500)
});
}
};
contactForm.init();
});
Это похоже на волшебство для меня! :) – wootscootinboogie
Я не знал, что вы можете передать несколько параметров 'call', спасибо за головы. – wootscootinboogie