使用JavaScript,是否可以使用prototype将方法添加到尚未赋值的变量中。
例如,我可以这样做:
var foo = "bar";
String.prototype.doTheFoo = function(){
console.log("foo is better then you");
};
foo.doTheFoo();
这为方法doTheFoo();
提供了所有字符串有可能某些人如何做同样的事情,但有些东西没有给出值?
var foo;
(????).prototype.doTheFoo = function()...
谢谢:)
答案 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) {
......只要你注意以下内容......
从不 阴影或使用不同的值定义window.undefined
从不 使用任何违反#1的代码
从不 尝试获取未声明的变量的值
负责维护一个未受损害的环境(一个非常简单的任务),你就没有问题。
答案 1 :(得分:0)
你能把气体放在你还没有的汽车里吗?当然不是;你不能无所事事。
同样,您不能将方法附加到空变量;什么都没有(因此没有prototype
可以附加)。
从技术上讲,声明但未分配的变量是 undefined ,这是一种特殊的原始值类型。基元没有属性,因此您无法附加任何方法。
你可以向Object
的{{1}}添加一些东西(其他一切都继承了),这样当你为变量赋值时,它会有那个方法但这是一个非常非常的坏主意。