我想覆盖javascript对象的访问器,以便它不是覆盖它应该返回一个固定值。
例如
var obj = {};
console.log(obj.someProperty) //will print undefined expected value false
答案 0 :(得分:0)
如果某个属性未定义,则默认情况下无法返回alist = string_.split(', ')
,但它将为“falsey”。
例如:
false
测试真实性的更明确的方法是使用double bang operator:
var obj = {};
if (!obj.someProperty) {
console.log("expression is falsey");
}
但简而言之,您所追求的目标无效,因为JavaScript中的无法重新定义var obj = {};
console.log(!!obj.someProperty) // print's undefined, but evaluates to false
。
答案 1 :(得分:0)
我会这样做:
var obj = {};
if (!obj.hasOwnProperty('itdoesnthavethis')) console.log('property is not there')
这将始终返回一个布尔值,并且不会通过对象的属性链检查属性,只检查对象本身。
答案 2 :(得分:0)
使用ES6及其Proxy feature,您可以执行以下操作:
var obj = {};
obj = new Proxy(obj, {
get: function(target, prop) {
var pv = target[prop];
return pv === undefined ? false : pv;
}
});
这将基本上创建围绕对象处理属性获取操作的代理包装器。
使用ES5,任何属性都无法达到类似的效果。
但是如果知道了一组属性,你可以设计自己的对象类:
function MyObject() {}
MyObject.prototype.foo = false;
MyObject.prototype.bar = false;
MyObject.prototype.baz = false;
并将其用作:
var obj = new MyObject();
console.log(obj.foo); // false
console.log(obj.bar); // false
console.log(obj.foobar); // undefined