我正在为我的Chrome扩展程序编写一些代码以将某些脚本注入某个页面。在JavaScript中,是否有一个事件来检查变量名是否刚创建?
我想在window
对象中创建对象后立即更改属性值。
是否有事件来检查属性是否已添加到对象?
我正在为我的Chrome扩展程序编写一些代码以将某些脚本注入某个页面。在JavaScript中,是否有一个事件来检查变量名是否刚创建?
我想在window
对象中创建对象后立即更改属性值。
是否有事件来检查属性是否已添加到对象?
怎么样对您正在搜索的窗口对象的属性创建setter方法?
查核在此小提琴的代码:http://jsfiddle.net/j6jagzan/1/
Object.defineProperty(window, "myprop",
(function() {
var prop;
return {
configurable: true,
enumerable: true,
get: function() {
return prop;
},
set: function(value) {
console.log("object has been set to " + value);
//Your code here
prop = value;
}
}
})()
);
//Set the global property
myprop = 3;
它使用一个“立即调用的函数表达式”(IIFE)与属性的值存储在一个闭合。
当然,如果是像prop = value
或window["prop"] = value
** @ the_tiger **你的答案是最好的^^这就是我现在需要的。因为我知道变量名,所以我可以在你的代码中使用'set:function(){}'来改变它的值。非常感谢!!! –
很好的答案。但我不得不说,这和@昆汀的一样,而且是在后面。 –
@TrầnQuốcHoàinew2015我很高兴我能帮到你:) –
据我所知,没有一个事件检查是否创建了一个变量名。
你可以做什么,是使用间隔来检查一个变量,然后一旦它被定义,就做一些事情。这里是一些伪代码:
setInterval(function() {
if (theVariable !== 'undefined')
// yay, it's been defined!
}, 1000)
谢谢** sircapsalot **,但如果我们检查每一个不好的,因为我想在创建后更改变量的值,页面将为页面中下一行代码使用新值。因为下一行需要新的值,请立即更改并应用。所以在1s中,我认为页面中的所有代码都被执行了。但是如果我们改变时间较短,页面就会崩溃。 –
@sircapsalot - 不正确。浏览器强制执行最小延迟。即使情况并非如此,他们仍然不会中断另一个运行事件处理程序的函数。 – Quentin
删除了关于@Quentin最小延迟的评论。不知道 – sircapsalot
不,没有。
如果你需要这个,那么你最好使用带setter函数的对象。
var o = {
set myValue(str) {
this._str = str;
alert(str);
},
get myValue() {
return this._str;
}
}
o.myValue = "Hello";
document.body.innerHTML = o.myValue;
对不起,因为页面是创建变量的主机,我没有权利改变他如何创建变量的方式。所以目前这种方式对我来说并不好。 –
的Object.observe()
API是你在找什么。在撰写本文时,这是一项实验技术,是ECMAScript 2016(ES7)提案的一部分。
在此期间,您可以使用observe-js,这将在可用时利用Object.observe()
。
你可以使用一个PathObserver
观察只是财产你有兴趣(例如window.myProperty
):
var observer = new PathObserver(window, 'myProperty');
observer.open(function(newValue, oldValue) {
// respond to window.myProperty having changed value.
});
谢谢** Andrea Casaccia **这么多,但也许你是对的,我已经测试过了,表现是一件很重要的事情。我看到** the_tiger **的Object.defineProperty对这个问题来说太好了。我们应该学习它。 –
这是真的@TrầnQuốcHoàinew2015其他答案更简单,并且适用于此问题。 –
@ DanielA.White赋值表达式创建属性,这只会工作 - 这难道不是对DOM的变化,而不是变量的变化? – Quentin
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe –