【问题标题】:How to make a "dot function" in javascript如何在javascript中制作“点函数”
【发布时间】:2013-11-21 06:44:45
【问题描述】:

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

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

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

你如何定义其中之一?

【问题讨论】:

  • 不建议这样做。如果官方规范后面定义了一个同名但含义不同的函数呢?
  • 那么你必须在对象的原型中添加任何外部方法
  • 它们必须是对象的方法,并且并非所有事物的行为方式都适用于此。
  • 无论如何,2.toString() 是无效的语法。你必须使用2..toString()
  • 你正在寻找原型

标签: javascript function


【解决方案1】:

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

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】:

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

您可以通过将方法附加到 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

进一步阅读

【讨论】:

  • 而且你不会包括为什么向内置类型添加方法通常不好的任何原因?另外,为什么您的第一个 alert() 中有两个句点?
  • @jfriend00 我认为 JS 解析器需要 2 个点,否则只有一个前瞻,它无法确定它是小数还是只有一个点的方法访问点。
【解决方案3】:

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

需要注意的是,如果您有一个数字,则必须在其后放置 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

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

"hello".toUpperCase()
  .toLowerCase()
  .indexOf("h")//<=returns a number 
               //number has no charAt method
  .toString()
  .charAt(0)
  .substring(0);//<="0"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-26
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多