我相信你无法使用Object.observe()
是因为document.location
返回Location Object
类型的对象(这是特殊的只读接口),而不是“标准”的对象,观察document.location
的原因。
从Mozilla的文档:
的Document.location只读属性返回Location对象。 Document对象的位置属性是指位置 对象。 Window.location是一个只读的Location对象。
位置接口: https://developer.mozilla.org/en-US/docs/Web/API/Location
实施例:
console.log(document.location.__proto__); // returns Location {}
console.log(window.location.__proto__); // returns Location {}
window.location === document.location // always true
的Object.observe()方法被用于观察的变化的一个对象。
例子:
var o = { name: ''};
Object.observe(o, function(changes){
changes.forEach(function(change) {
console.log(change.type, change.name, change.oldValue);
});
});
o.name = 'foo'; // name is being observed
看,如果你测试对象是否在其原型链有一个构造函数,你可以得到的原型属性在他们的__proto__
console.log(document.location.__proto__); // returns Location {}
console.log(window.location.__proto__); // returns Location {}
console.log(o.__proto__); // returns Object {}
足够有趣的差异:代码示例:
var o = {
name: ''
};
Object.observe(o, function(changes) {
changes.forEach(function(change) {
console.log(change.type, change.name, change.oldValue);
});
});
o.name = 'foo';
console.log(document.location.__proto__); // returns Location {}
console.log(window.location.__proto__); // returns Location {}
console.log(o.__proto__); // returns Object {}
console.log(document.location instanceof Object); // true
console.log(o instanceof Object); // true
,使sens。在你的例子中,它适用于属性'foo'而不是'id',我尝试过'document.location',它对一个随机属性起作用,但对'.hash'不起作用。感谢您的回答 – Khalid 2015-03-31 14:55:12