0

使用 JavaScript,是否可以使用原型向尚未被赋予值的变量添加方法。

例如,我可以这样做:

var foo = "bar";

String.prototype.doTheFoo = function(){
  console.log("foo is better than you");
};

foo.doTheFoo();

这为所有字符串提供了方法 doTheFoo();

是否有可能对一些人如何做同样的事情,但是对于一些没有被赋予价值的东西?

var foo;

(????).prototype.doTheFoo = function()...

谢谢 :)

4

2 回答 2

3

不,原型方法在对象构造函数上进行。var foois的默认值undefined,它没有构造函数。

您可以通过扩展将方法添加到所有对象Object.prototype

Object.defineProperty(Object.prototype, 'doTheFoo', {
    value: function() { alert('foo'); }
});

现在任何具有对象包装器的值都可以使用该方法。

请注意,我用于Object.defineProperty作业。这仅在符合 ES5 的实现中可用。它使属性不可枚举,因此相对安全。


由于您似乎希望它在一个undefined值上工作而不是typeof测试,请考虑一个事实,typeof即永远不需要测试undefined.

如果这是你被告知的,那你就被骗了。很多人这么认为,仅仅是因为他们一直都这么说。这不是真的。

以下测试是一个非常安全的测试undefined...

if (foo === undefined) {

...只要您注意以下...

  1. 永远不要window.undefined用不同的值遮蔽或定义

  2. 切勿使用任何违反 #1 的代码

  3. 永远不要尝试获取未声明变量

负责维护一个未损坏的环境(一个非常简单的任务),你不会有任何问题。

于 2012-06-22T02:50:50.500 回答
0

你可以给你还没有的车加油吗?当然不是; 你不能把东西附加到任何东西上。

同样,您不能将方法附加到空变量;什么都没有(因此没有prototype附加)。

从技术上讲,已声明但未分配的变量是undefined,这是一种特殊的原始值类型。基元没有属性,因此您不能将任何方法附加到它。

可以Object在's中添加一些东西prototype(其他所有东西都继承自它),这样当您为变量分配一些值时,它将具有该方法,但这是一个非常非常糟糕的主意。

于 2012-06-22T02:52:30.857 回答