如何创建我不知道的javascript扩展方法';我不必把绳子传给你

如何创建我不知道的javascript扩展方法';我不必把绳子传给你,javascript,Javascript,例如,假设我有一个isNullOrEmpty函数定义如下 String.prototype.IsNullOrEmpty = function (o) { return o == null || o == ''; } 我想说这样的话: var s = 'test'; s.isNullOrEmpty 并将该字符串的答案设置为false或true。当您使用以下语法调用函数时: expression.function() 表达式的值将出现在中。因此,你应该这样写: String.protot

例如,假设我有一个
isNullOrEmpty
函数定义如下

String.prototype.IsNullOrEmpty = function (o) {
   return o == null || o == '';
}
我想说这样的话:

var s = 'test';
s.isNullOrEmpty

并将该字符串的答案设置为
false
true

当您使用以下语法调用函数时:

expression.function()
表达式的值将出现在
中。因此,你应该这样写:

String.prototype.IsNullOrEmpty = function() {
    return this == '';
};
如注释中所述,它永远不能为
null
。如果为null,则它不是字符串,因此不会调用
string.prototype
中的任何内容,除非您执行了以下反常操作:

Stirng.prototype.IsNullOrEmpty.call(null);

这不能用JavaScript来完成<代码>空。任何内容都将始终是错误。
我假设您有.NET背景,因为.NET中的扩展方法确实是这样工作的。但它不能与JavaScript一起工作

你唯一能做的就是
“string”.isEmpty()
,但是你需要包含
()
,因为JavaScript对没有
()
的“getter属性”没有足够的支持

为此,您需要:

String.prototype.isEmpty = function() { return this === ''; };
只用

!str
因为空字符串是错误的,空字符串也是错误的。(但是,请注意,对于
未定义的
,此方法也会返回true,布尔值为false,或数值为0。)

如果您真的想将此测试作为字符串上的方法调用,您可以通过以下方式使
“abc”.isNullOrEmpty
工作(作为“属性”,必须说
isNullOrEmpty()
):

Object.defineProperty(String.prototype, 'isNullorEmpty', {
    get: function() { return this === ''; }
});

但是,正如其他地方提到的,在
null

的情况下永远不会调用此函数。方法中的此
将是对字符串包装器对象的引用。因此,请执行
var o=this+“”
。不确定
null
测试的目的。看起来你可以直接做
返回!此.length
如果变量为
null
,则字符串原型的
IsNullOrEmpty
方法将不应用于它所链接/应用的对象;因此,
o==null
永远不能计算为
true
。你到底想查什么?为什么?斜视你是对的,你能把你的回答作为答案贴出来吗?这样我就可以标记它了。空检查的原因是我来自.Net背景。我将不得不修改函数名。谢谢大家提供的信息和帮助!事实上,JS为getter属性提供了非常好的支持,这些属性在没有
()
的情况下可以工作。Torazaburo,您能否提供一个示例,因为如果我尝试在没有()的情况下执行此操作,它将不起作用。它将写出函数文本,而不运行函数。