gpt4 book ai didi

javascript - 我如何将静态函数的值发送到另一个对象?

转载 作者:行者123 更新时间:2023-12-03 00:04:01 25 4
gpt4 key购买 nike

  (function ($, window, undefined) {
'use strict';

class Slider {

static init(loop) {
Slider.loop = loop;
return Slider.loop;
}

};
$.fn.blueSlider = function(loop, options) {
var defaults = {

}
var loop = Slider.init(loop);
console.log(loop);
$.extend(defaults, options);
};
}(jQuery))

$('div').blueSlider(true);
<div></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

我是使用类函数编写代码的新手,因此请原谅我在问题中没有提到的任何其他错误。

我正在尝试将类函数和jQuery插件结合起来。这行:$.fn.blueSlider = function(loop, options),jQuery初始化函数有2个参数,loop参数实际上是Slider.init( ) 的参数。因此,我必须声明一个类似于 var Loop = Slider.init(loop); 的新变量,用于访问 loop 值。

我的期望是将loop参数放在options内部,这样当我想要更改的值时,它可以被jQuery初始化方法调用像这样循环:



$(className).blueSlider({
loop: false,
// etc.
})

我尝试创建一个对象options并将其放入loop参数中以将值传输到另一个对象,但它不起作用:

$.fn.blueSlider = function(options) {
var defaults = {

}
var options = {
loop: Slider.init(loop),
}
$.extend(defaults, options);
};

有什么办法可以解决这个问题吗?

最佳答案

如果您要使用 class 语法,则不需要提供自定义 init 函数;相反,提供一个构造函数并使用 new

记住 jQuery 是基于集合的,这也很重要,这意味着当您被调用时,this 是一个包含集合的 jQuery 对象的元素。在大多数情况下,插件要做的适当的事情就是就像在每个元素上单独调用它一样。例如:

(function ($, window, undefined) {
'use strict';

// Moved defaults out of the function, added
// more for the example
const defaults = {
someOption: "foo",
someOtherOption: "bar",
color: "green"
};

// The class
class Slider {
constructor(loop = true, options) {
// Handle initialization in the constructor
this.options = defaults;
this.setOptions(loop, options);
}
setOptions(loop, options) {
this.loop = loop;
this.options = Object.assign({}, this.options, options);
// In ES2017+, you could use:
// this.options = {...defaults, ...this.options};
}
// Use a method to handle applying the slider to an element
apply($el) {
// ...do slider's thing on $el...
$el.css("color", this.options.color);
$el.text("loop = " + this.loop);
}
}

$.fn.blueSlider = function(loop, options) {
// Loop through the elements
this.each(function() {
// Create or reuse an instance for each element
const $el = $(this);
let slider = $el.data("blueSlider");
if (slider) {
// Element already has a slider
slider.setOptions(loop, options);
} else {
// Create slider for element, remember it
slider = new Slider(loop, options);
$el.data("blueSlider", slider);
}
slider.apply($el);
});
};
}(jQuery))

$('div.a').blueSlider(true, {color: "blue"});
$('div.b').blueSlider(false);
setTimeout(() => {
$('div.a:first').blueSlider(false);
}, 800);
<div class="a"></div>
<div class="a"></div>
<div class="b"></div>
<div class="b"></div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

关于javascript - 我如何将静态函数的值发送到另一个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55046434/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com