JavaScript函数参数与对象方法

时间:2019-02-13 18:33:16

标签: javascript function variables

有人可以向我解释何时通过将变量输入圆括号来使用函数,以及何时在变量后加上句点来固定函数的区别,例如使用toString()函数?

示例代码

function addMe(a){
a = a+1;
return a;
}
var num = 1;
addMe(num);
num.toString();

我实际上不确定我的语法是否正确,但是我想知道何时将变量作为参数输入,就像我如何将变量num馈入addMe函数。以及何时通过在变量后加上句点并键入函数来使用.toString()函数。

如果我正确构建了函数,我是否可以做类似的事情?

var num = 1;
num.addMe();

感谢您的帮助!

3 个答案:

答案 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”除外(undefinednull)),通过查找原型链。对于一个简单的对象,链条非常短:

 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 ... ?

您实际上得到了两个变量(anum),更改a不会更改num。但是当您返回a时,您可以执行以下操作:

num = addMe(num);

num的值复制到a,然后将a加1,然后将a的值返回到num

答案 2 :(得分:-1)

完成var num = 1后,您创建了一个JavaScript对象。它看起来像一个数字,但是您可以将JavaScript中的所有内容视为一个对象(简化),并且所有这些对象都具有不同的功能。因此,数字具有某些功能,字符串具有其他功能,等等。

您提到了一项功能:toString。另一个功能是toLowerCase

toStringtoLowerCase是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

是定义函数并调用它的标准方法。