如何在javascript中制作“点功能”

时间:2013-11-09 05:59:16

标签: javascript function

我试图定义一个"点功能"其中没有参数,但有一个.和一个字符串或数字,如下所示:

  

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

你做2..toString,而不是toString(2)

你如何定义其中一个?

为什么当我输入4..toString()时,它会返回function toString() {[native code]}

3 个答案:

答案 0 :(得分:15)

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

您可以将方法附加到NumberString类型的原型来执行此操作:

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

进一步阅读

答案 1 :(得分:13)

定义“点功能”很容易。以下是在单个对象上定义它的方法。

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()); 

答案 2 :(得分:-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"