JavaScript原型为空变量

时间:2012-06-22 02:48:23

标签: javascript node.js

使用JavaScript,是否可以使用prototype将方法添加到尚未赋值的变量中。

例如,我可以这样做:

var foo = "bar";

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

foo.doTheFoo();

这为方法doTheFoo();

提供了所有字符串

有可能某些人如何做同样的事情,但有些东西没有给出值?

var foo;

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

谢谢:)

2 个答案:

答案 0 :(得分:3)

没有。原型方法继续使用对象构造函数。 var foo的默认值为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. 从不 尝试获取未声明的变量的值

  4. 负责维护一个未受损害的环境(一个非常简单的任务),你就没有问题。

答案 1 :(得分:0)

你能把气体放在你还没有的汽车里吗?当然不是;你不能无所事事。

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

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

可以Object的{​​{1}}添加一些东西(其他一切都继承了),这样当你为变量赋值时,它会有那个方法但这是一个非常非常的坏主意。