![](/img/trans.png)
[英]Javascript: How to call this.Something() from this.img.onload = SomeLoadFunction;
[英]How change the value of this.something with a looping
if (this.name === '') {
this.name= 'None';
}
if (this.obs === '') {
this.obs = 'None';
}
伙计们,我怎么干这个代码? 我正在这样尝试:
var v = [this.name, this.obs];
for(var i = 0; i < v.length; i++) {
if(v[i] === '') {
v[i] = 'None';
}
};
但是根本不起作用...
我认为你要找的是一个功能。 这样的事情
function setToNoneIfEmpty (stringInput) {
if (stringInput === '') {
stringInput = 'none';
}
return stringInput;
}
要使这个更干净,你应该使用三元语句,只返回值而不重新分配参数,所以函数看起来像这样
function setToNoneIfEmpty (stringInput) {
return stringinput === '' ? 'None' : stringinput;
}
有了这个你应该能够传入this.name
和this.obs
,该函数将相应地更改它们。 你会这样称呼它们
this.name = setToNoneIfEmpty(this.name);
this.obs = setToNoneIfEmpty(this.obs);
您的原始代码无法正常工作,因为您创建了一个多维数组,然后没有将这些值作为多维数组访问。
我建议的方式会更好,而且更容易阅读
我不是Java专业人士(长话短说),但是有人向我提到可以用不同的方式完成,实际上您可以在其中访问对象并传递要检查的对象属性。
function setToNoneIfEmpty(obj, name) {
if (obj[name] === '') {
obj[name] = 'None';
}
}
因此,我们不是传入一个变量来返回一个字符串,而是传入一个对象和属性名称,这使得代码甚至是DRY-er,就像我们在使用它时所看到的那样
setToNoneIfEmpty(this, 'name')
setToNoneIfEmpty(this, 'obs')
请记住,我们不仅可以像object.property
一样访问对象的属性,还可以通过下标操作符访问object['property']
: object['property']
。 因此,我们可以遍历我们想要更改的属性的所有名称:
var propertyNames = ['name', 'obs'];
for(var i = 0; i < propertyNames.length; i++) {
if(this[propertyNames[i]] === '') {
this[propertyNames[i]] = 'None';
}
};
使用Array.forEach
,代码变得更简单:
['name', 'obs'].forEach(function (key) {
if (this[key] === '') {
this[key] = 'None';
}
});
使用for..in
循环和OR运算符。
for(var key in this)
this[key] = this[key] || 'None';
for..in
循环遍历的枚举的属性this
和this[key]
被分配给自己,如果不是''
。 如果是''
,那么'None'
将被分配给它,因为''
被认为是假的
尝试这个:
var v = [this.name, this.obs];
v.forEach(function(elem){
if(!elem) elem = 'NONE';
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.