我试图定义一个"点功能"其中没有参数,但有一个.
和一个字符串或数字,如下所示:
.toUpperCase()
.toLowerCase()
.indexOf()
.charAt()
.substring()
你做2..toString
,而不是toString(2)
。
你如何定义其中一个?
为什么当我输入4..toString()
时,它会返回function toString() {[native code]}
?
答案 0 :(得分:15)
我强烈建议您不要尝试替换任何内置方法,但是,您可以随意定义自己的方法。
您可以将方法附加到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
进一步阅读
答案 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"