JavaScript:如果现有对象被实例化为具有特定值,如何创建警报

JavaScript: how to create an alert if an existing object is instantiated with a specific value?

本文关键字:何创建 创建 对象 如果 实例化 JavaScript      更新时间:2023-09-26

(这只是出于个人好奇)

当任何一个内置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