Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在不同实例中使用的Javascript全局变量,也称为adSense_Javascript_Encapsulation - Fatal编程技术网

在不同实例中使用的Javascript全局变量,也称为adSense

在不同实例中使用的Javascript全局变量,也称为adSense,javascript,encapsulation,Javascript,Encapsulation,我已经创建了一个简单的广告服务脚本,您可以使用全局参数调用它,然后调用一个外部脚本,使用这些参数来显示广告 <script> var ad_width = 100; var ad_height = 200; var ad_div = 'someDivID'; </script> <script src='./js/ads.js'></script> 这是可行的,但当我有第二个实现时,全局变量刚刚写完,我需要某种形式的封装,javascript不是

我已经创建了一个简单的广告服务脚本,您可以使用全局参数调用它,然后调用一个外部脚本,使用这些参数来显示广告

<script>
var ad_width = 100;
var ad_height = 200;
var ad_div = 'someDivID';
</script>
<script src='./js/ads.js'></script>

这是可行的,但当我有第二个实现时,全局变量刚刚写完,我需要某种形式的封装,javascript不是我最重要的语言,所以我不确定我在寻找什么。

我想如果你想允许多个易于配置的广告,那么你可以将它们存储在一个数组中:

var ads = [
    {
        width: 100,
        height: 200,
        div: 'someDivID'
    },
    ...
];
或者,如果您认为这对您的客户来说太难,您可以允许他们编写如下变量:

var ad1_width = 100;
var ad1_height = 200;
var ad1_div = 'someDivID';

var ad2_width = 200;
var ad2_height = 100;
var ad2_div = 'someOtherDivID';
然后在代码中,您可以通过检查窗口对象来检查它们的变量:

这很奇怪,也不完全是正确的Waytm,但它确实让最终用户很容易进行配置。只要确保你的客户总是按顺序编号,如果你这样做的话,并且他们没有使用任何其他可能使用任何相同变量名的JS

另一种可能是在窗口上设置一个属性,以便在设置这些变量时侦听:

var adWidths = [],
    adHeights = [],
    adContainers = [];

Object.defineProperty(window, 'ad_width', {
    set: function(val) {
        adWidths.push(val);
    }
});
Object.defineProperty(window, 'ad_height', {
    set: function(val) {
        adHeights.push(val);
    }
});
Object.defineProperty(window, 'ad_div', {
    set: function(val) {
        adContainers.push(val);
    }
});
现在,您的客户只需执行以下操作即可设置广告:

ad_width = 200;
ad_height = 100;
ad_div = 'someDivID';

ad_width = 100;
ad_height = 200;
ad_div = 'someOtherDivID';
您可以通过以下方式访问每个广告:

for (var i = 0, len = adWidths.length; i < len; i++) {
    displayAd(adWidths[i], adHeights[i], adContainers[i]);
}

但这确实需要在它们运行之前和之后运行一些代码。此解决方案也与旧版本的IE不兼容。

为什么不创建一个对象,每次用不同的值实例化该对象?我希望发布者能够尽可能省力/省心地将代码添加到他们的站点,所以只要复制一个代码片段并修改参数来定制它。我的目标是建立一个用户群,他们甚至可能不是开发人员,所以任何复杂的事情对他们来说都太多了。我相信这应该能起到一些作用,因为这是谷歌如何实现他们的广告,谷歌手动传递每个广告对象,除非你谈论的是他们API的不同部分。是的,我想也许我可以让它更复杂一点,用不同的参数调用函数。该api看起来与使用全局变量的旧版本不同。我添加了一个配置对象var obj1={'someParam':'value'}var obj2={'someParam':'value2'}\uu myFuncobj1__myFuncobj2;然后将其添加到数组中并循环。
ad_width = 200;
ad_height = 100;
ad_div = 'someDivID';

ad_width = 100;
ad_height = 200;
ad_div = 'someOtherDivID';
for (var i = 0, len = adWidths.length; i < len; i++) {
    displayAd(adWidths[i], adHeights[i], adContainers[i]);
}