有人可以向我解释何时通过将变量输入圆括号来使用函数,以及何时在变量后加上句点来固定函数的区别,例如使用toString()函数?
示例代码
function addMe(a){
a = a+1;
return a;
}
var num = 1;
addMe(num);
num.toString();
我实际上不确定我的语法是否正确,但是我想知道何时将变量作为参数输入,就像我如何将变量num馈入addMe函数。以及何时通过在变量后加上句点并键入函数来使用.toString()函数。
如果我正确构建了函数,我是否可以做类似的事情?
var num = 1;
num.addMe();
感谢您的帮助!
答案 0 :(得分:3)
第一个用于简单的“独立”功能,而第二个用于对象方法。例如,默认情况下,数字对象具有toString()方法。一些对象方法可能还需要在括号之间传递参数。
答案 1 :(得分:0)
在作用域链中查找变量(一个函数声明只是一个存储在变量中的函数)(转到下一个外部作用域,直到找到具有名称的变量为止):
let a = 1; // outer scope
{ // inner scope
console.log(a); // looked up in "inner scope", than "outer scope"
}
在对象原型链中查找对象的属性,因此,如果这样做
a.b
然后a
在上述作用域中查找,然后在生成的对象上访问b
(JavaScript中的所有对象,“ nothing”除外(undefined
,null
)),通过查找原型链。对于一个简单的对象,链条非常短:
const a = { b: 1 }; // object -> Object.prototype
此处b
将在对象本身中找到。但是,所有对象都继承自Object.prototype
对象,因此,如果您向该对象添加属性(请不要):
Object.prototype.test = 1;
然后,您可以在查找遍历原型链并到达Object.prototype
时在每个对象上查找它:
console.log({}.test); // 1
现在输入数字(就像您的情况一样),它们会继承Number.prototype
,因此您可以执行以下操作:
Number.prototype.addMe = function() {
console.log(this);
};
// two dots are needed to distinguish it from numbers with a fraction (e.g. 1.2)
1..addMe();
也就是说,现在addMe
可以在代码中的每个地方的每个号码上调用。尽管这似乎有用,但实际上您很痛苦,因为您不知道在哪里添加了某种方法
1..whereDoIComeFrom()
使得代码难以阅读和结构化。相反,如果您需要多次使用某个功能,请将其抽象为一个功能,请不要触摸本机原型。
我认为addMe
只是一个简化的示例,如果不是,请继续阅读:
如果您在JavaScript中将参数传递给函数,则该值将被复制(非原语(数字,布尔值等除外)会更加复杂)到此处调用的函数的参数变量中:
function addMe(a){
a = a+1;
console.log(a); // 2
return a;
}
var num = 1;
addMe(num);
console.log(num); // 1 ... ?
您实际上得到了两个变量(a
和num
),更改a
不会更改num
。但是当您返回a
时,您可以执行以下操作:
num = addMe(num);
将num
的值复制到a
,然后将a
加1,然后将a
的值返回到num
。
答案 2 :(得分:-1)
完成var num = 1
后,您创建了一个JavaScript对象。它看起来像一个数字,但是您可以将JavaScript中的所有内容视为一个对象(简化),并且所有这些对象都具有不同的功能。因此,数字具有某些功能,字符串具有其他功能,等等。
您提到了一项功能:toString
。另一个功能是toLowerCase
。
toString
和toLowerCase
是JavaScript附带的函数。这些功能然后“穿上”所有这些对象供我们使用。
我可以有一个像这样的字符串变量
var text = 'MY TEXT'
var lowercaseText = text.toLowerCase()
console.log(lowercaseText) // my text
此代码将起作用,因为已确定toLowerCase
函数应在字符串上起作用
我也可以有一个数组(项目列表)
const list = ['A', 'B', 'C']
const answer = list.toLowerCase()
console.log(answer)
但是该代码无法使用,因为toLowerCase在数组上不起作用。因此,您收到以下错误消息:list.toLowerCase is not a function
。
基本上是这样说的:我不知道toLowerCase在此列表变量(数组)上使用时的含义。
在JavaScript中,这称为原型。原型是JavaScript从其他功能中获取某些功能的一种方式。基本上:我有各种各样的功能,什么对象可以使用什么功能。这称为原型链。
在两种情况下,您都使用函数。 addMe是您创建的函数,而toString是JavaScript中通过此原型链放置在对象上的函数。
我实际上不确定我的语法是否正确
是的,您的语法正确。您的addMe函数是在JavaScript中创建函数的标准方法。
但是我想知道何时将变量作为参数,例如我 将变量num输入到addMe函数。
就像您一样,您也定义了一个函数和参数。
..以及何时使用函数.toString(),并在句号后加上句点 变量并键入函数。
当您要将函数放置在一个对象上,以便该对象的所有实例都可以使用该对象时。
在大多数情况下,尤其是当您入门时。您不必担心这些原型。你的方式。
function addMe(number) {
return number+1
}
const answer = addMe(1) //2
是定义函数并调用它的标准方法。