我正在尝试定义一个“点函数”,它没有参数,但在它之前有一个点(.
)和一个字符串或数字,例如:
.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 可以这样做,但大多数不建议这样做)。
你甚至可以在内置类型上这样做(一些库进行了类似操作,例如Prototype.js,尽管大多数不建议这样做)。
Number.prototype.dotFunction = function() { return 'hi'; };
console.log((0).dotFunction());
我强烈建议不要尝试替换任何内置方法,但你可以随意定义自己喜欢的方法。
你可以通过将方法附加到Number
或String
类型的原型上来实现这一点:
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我会尝试一下,因为没有人提到您已经可以在不必自己定义任何内容的情况下完成此操作。
需要注意的一件事是,如果您有一个数字,您必须在其后放置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"