我有以下代码:
var TagCloud = (function() {
var createTagsArray = function() {
j$("#" + this.cloudId + " a").each(function(index) {
//bla bla
});
}
function TagCloud(cloudId) {
this.cloudId = cloudId;
};
TagCloud.prototype.createTagCloud = function(){
createTagsArray(this.cloudId);
};
return TagCloud;
}());
new TagCloud("tagcloud");
我创建了TagCloud对象。我用闭包创建它有一个私有函数 createTagArray 。但是在这个函数中我可以访问TagCloud构造函数中定义的变量 - cloudId 。当然,在这个例子中,我无法使用 this 来获取它。但无论如何要得到它? (我不想将此值作为函数 createTagArray 参数传递)。
理解闭包的使用也是我的错误,因为我已经开始使用闭包。
答案 0 :(得分:1)
您无法通过闭包访问变量,因为您需要在createTagsArray
构造函数中定义TagCloud
函数 - 然后您无法从createTagCloud
访问它方法不再公开。
但我认为你不想要访问变量。您希望访问实例的.cloudId
属性,为此您需要实例。
传递它 - 属性值或完整实例 - 作为参数实际上是首选。这没有错:
var createTagsArray = function(cloudId) {
j$("#" + cloudId + " a").each(function(index) {
//bla bla
});
}
TagCloud.prototype.createTagCloud = function(){
createTagsArray(this.cloudId);
};
使用call
您甚至可以传递实例本身,以便您可以this
访问它:
var createTagsArray = function() {
j$("#" + this.cloudId + " a").each(function(index) {
//bla bla
});
}
TagCloud.prototype.createTagCloud = function(){
createTagsArray.call(this);
};
从那里你甚至可以轻松地(来回)切换到半私人方法:
TagCloud.prototype._createTagsArray = function() {
j$("#" + this.cloudId + " a").each(function(index) {
//bla bla
});
}
TagCloud.prototype.createTagCloud = function(){
this._createTagsArray();
};
答案 1 :(得分:0)
请尝试以下代码:
use strict;
use warnings 'all';
open(my $fh1, '<', 'sym.dat') or die $!;
open(my $fh2, '<', 'sym2.txt') or die $!;
open my $fh_out, '>', 'symout.txt' or die $!;
until ( eof $fh1 or eof $fh2 ) {
my @l1 = map hex, split '', <$fh1>;
my @l2 = map hex, split '', <$fh2>;
my $n = @l2 > @l1 ? @l2 : @l1;
my @sum = map {
no warnings 'uninitialized';
$l1[$_] + $l2[$_];
} 0 .. $n-1;
@sum = map { split //, sprintf '%08X', $_ } @sum;
print { $fh_out } "reverse @sum\n";
}
&#13;