如何直接分配或继承对象属性?

Mil*_*uzz 1 javascript oop object

我有一个默认值的构造函数:

var myObject = function(){
    this.myValue = "default";
}
Run Code Online (Sandbox Code Playgroud)

然后我实例化一个新对象:

var newInstance = new myObject();
Run Code Online (Sandbox Code Playgroud)

如何判断是否myValue为原始默认值,并且尚未重新分配.我无法检查该值,因为它可以设置为相同,并且会产生误报.

Mat*_*all 5

使用Object.hasOwnProperty().

if (newInstance.hasOwnProperty('myValue')) {
    // original default value
}
Run Code Online (Sandbox Code Playgroud)

但是,这将无法告诉您这是否发生:

newInstance.myValue = 'default';
Run Code Online (Sandbox Code Playgroud)

要检测到这一点,您需要使用getter/setter之类的东西并跟踪私有变异标记:

function myObject() {
    var _myValue = "default";
    var _wasMutated = false;

    return {
        get myValue() {
            return _myValue;
        },
        set myValue(x) {
            _myValue = x;
            _wasMutated = true;
        },
        get wasMutated() {
            return _wasMutated;
        }
    }
}

// usage:
var newInstance = new myObject();
newInstance.myValue;                // "default"
newInstance.wasMutated;             // false
newInstance.myValue = "default";
newInstance.wasMutated;             // true
newInstance.wasMutated = false;     // writes have no effect since there's no setter
newInstance.wasMutated;             // true
Run Code Online (Sandbox Code Playgroud)