覆盖对象accessot javascript

时间:2016-02-06 01:08:38

标签: javascript

我想覆盖javascript对象的访问器,以便它不是覆盖它应该返回一个固定值。

例如

var obj = {};
console.log(obj.someProperty) //will print undefined expected value false

3 个答案:

答案 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')

这将始终返回一个布尔值,并且不会通过对象的属性链检查属性,只检查对象本身。

在此处阅读更多内容:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

答案 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