22

我正在尝试定义一个“点函数”,其中没有参数,但.在它之前有一个字符串或数字,如下所示:

.toUpperCase()
.toLowerCase()
.indexOf()
.charAt()
.substring()

你有2..toString,没有toString(2)

你如何定义其中之一?

4

3 回答 3

24

定义“点函数”很容易。以下是如何在单个对象上定义它。

var a = {}, or a = function() {}, or a = [], etc.

a.dotFunction = function() { return 'hi'; }

console.log(a.dotFunction());

如果要在“类”的所有实例上定义它,请使用prototype.

function someClass() {
}

someClass.prototype.dotFunction = function() { return 'hi'; };

console.log(new someClass().dotFunction());

您甚至可以在内置类型上执行此操作(有些,例如 Prototype.js,执行此操作,但大多数人不建议这样做)。

Number.prototype.dotFunction = function() { return 'hi'; };

console.log((0).dotFunction()); 
于 2013-11-09T06:07:19.177 回答
17

我强烈建议不要尝试替换任何内置方法,但是,您可以随意定义自己的方法。

您可以通过将方法附加到NumberorString类型的原型来做到这一点:

Number.prototype.foo = function(n) { return this * n; };
String.prototype.bar = function(n) { return this.length * n; };

alert(4..foo(2));  // 8
alert("4".bar(2)); // 2

延伸阅读

于 2013-11-09T06:07:41.990 回答
-1

我会试一试,因为没有人提到你已经可以做到这一点而不必自己定义任何东西。

需要注意的一点是,如果您有一个数字,则必须在其后放置 2 个点,就好像您有一个返回数字的函数或一个包含您没有的变量的变量:

1..toString()
 .indexOf("1")//<=returns number 0
 //even though a number is returned we only need one dot here
 .toString();//<="0"

var num = 1234;
num.toString()//<=one dot
  .indexOf("23");//<=1

您的示例已经可以使用,但是indexOf如果您给它一个有意义的参数并且一个数字没有charAt方法,它将返回一个数字。

"hello".toUpperCase()
  .toLowerCase()
  .indexOf("h")//<=returns a number 
               //number has no charAt method
  .toString()
  .charAt(0)
  .substring(0);//<="0"
于 2013-11-09T10:07:16.890 回答