如何创建一个javascript扩展方法,我不必将字符串传入

时间:2014-11-08 00:12:24

标签: javascript

对于Instance,我可以说我的isNullOrEmpty函数定义如此。

String.prototype.IsNullOrEmpty = function (o) {
   return o == null || o == '';
}

我希望能够说出这样的话:

var s = 'test';
s.isNullOrEmpty

并获得该字符串的falsetrue答案。

3 个答案:

答案 0 :(得分:1)

使用语法调用函数时:

expression.function()

表达式的值将在this中。所以你应该把它写成:

String.prototype.IsNullOrEmpty = function() {
    return this == '';
};

正如评论中所提到的,它永远不会是null。如果它是null,那么它不会是一个字符串,所以不会调用String.prototype中的任何内容,除非你做了一些反常的事情:

Stirng.prototype.IsNullOrEmpty.call(null);

答案 1 :(得分:1)

只需使用

!str

因为空字符串是假的,空字符也是如此。 (但请注意,此方法对undefined,布尔值为false或数值为0也会返回true。)

如果您确实想要将此测试称为字符串上的方法,则可以使"abc".isNullOrEmpty工作(作为“属性”,不得不说isNullOrEmpty()),并说:

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

但是,如其他地方所述,在null

的情况下,永远不会调用此方法

答案 2 :(得分:-1)

这不能用JavaScript完成。 null.anything永远是一个错误 我假设您有.NET背景,因为.NET中的扩展方法确实以这种方式运行。但它不适用于JavaScript。

你唯一可以做的就是"string".isEmpty(),但是你需要包含(),因为JavaScript并没有足够的支持#34; getter属性"没有()的工作。

为此,您需要:

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