我正在尝试定义一个“点函数”,其中没有参数,但.
在它之前有一个字符串或数字,如下所示:
.toUpperCase()
.toLowerCase()
.indexOf()
.charAt()
.substring()
你有2..toString
,没有toString(2)
。
你如何定义其中之一?
我正在尝试定义一个“点函数”,其中没有参数,但.
在它之前有一个字符串或数字,如下所示:
.toUpperCase()
.toLowerCase()
.indexOf()
.charAt()
.substring()
你有2..toString
,没有toString(2)
。
你如何定义其中之一?
定义“点函数”很容易。以下是如何在单个对象上定义它。
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());
我强烈建议不要尝试替换任何内置方法,但是,您可以随意定义自己的方法。
您可以通过将方法附加到Number
orString
类型的原型来做到这一点:
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
延伸阅读
我会试一试,因为没有人提到你已经可以做到这一点而不必自己定义任何东西。
需要注意的一点是,如果您有一个数字,则必须在其后放置 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"