JavaScript:如果现有对象被实例化为具有特定值,如何创建警报
JavaScript: how to create an alert if an existing object is instantiated with a specific value?
(这只是出于个人好奇)
当任何一个内置JavaScript对象(意思是:我自己没有定义的对象)被实例化为特定值时,我想设置一个自动警报。
例如,这里有一个非内置对象,名为"Test":
function Test(first, last) {
this.firstName = first;
this.lastName = last;
}
我尝试过的一件事是在"Test"对象中添加一个名为"checkName"的自执行函数,如下所示:
Test.prototype.checkName = function() {
var n = this.firstName;
if (n == "Mickey") {
alert("It's Mickey!!");
}
}();
然而,如下实例化不会导致警报:
var a = new Test("Mickey", "Mouse");
是否可以增加现有对象,以便在属性具有特定值时创建自动警报?
如果是的话,如何做到这一点?
JavaScript无法读懂你的心思。您必须手动调用该方法。
它必须是一个方法,而不是一个立即调用的函数表达式。当你这样调用它时,this
在草率模式下变成全局对象,或者在严格模式下变成未定义对象。所以this.firstName
要么是window.firstName
,要么抛出异常。
function Test(first, last) {
this.firstName = first;
this.lastName = last;
this.checkName();
}
Test.prototype.checkName = function() {
var n = this.firstName;
if (n == "Mickey") {
alert("It's Mickey!!");
}
};
var a = new Test("Mickey", "Mouse");
您可以使用lib https://github.com/Olical/EventEmitter
并扩展Object.prototype,以便在每次创建对象时发出事件,并为您发出事件警报。
您不能修改现有的构造函数,但可以替换它们。以下代码将在实例化时发出警报,替换后的构造函数将产生与以前相同的对象:
var _Set = Set;
Set = function() {
var args = Array.prototype.slice.call(arguments, 0);
alert(JSON.stringify(args));
return new (Function.prototype.bind.apply(_Set, [null].concat(args)));
};
new Set("kenyér"); // alerts ["kenyér"]
然而,在此之后,您不能期望任何库正常工作,例如instanceof
运算符不再工作:
new Set() instanceof Set // will return false
new Set() instanceof _Set // will return true
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 为effect Composer创建GodRays效果过程
- 从javascript创建一个列表
- onkeyup无法动态创建多个文本区域
- 如何使用javascript从主svg对象动态创建svg视图框
- 如何访问声音管理器2创建的声音对象
- 我已经创建了一个jquery转盘,并使用if条件来运行和停止转盘
- Kendo:我该如何在树视图中创建一个递归的hieiarchy
- 使用Facebook live API创建实时视频对象时的隐私设置
- 在动态创建的元素上获取对特定选择器的引用
- 如何创建带有插槽的vue js组件预加载程序
- 如何在创建键时引用来自同一对象的键
- 如何创建JSON数组
- 从html创建一个指令,该指令按类名应用函数
- 使用Javascript创建测验页面
- 更改使用Chart.js创建的图表中的轴线颜色
- Javascript对象创建-创建许多对象
- 如何创建创建关联数组
- 如何在HTML表单中创建两组单选按钮,以及在a组中的更改何时会在B组中更改
- 动态创建/创建变量's字典并打印