当前位置: 代码迷 >> JavaScript >> JavaScript函数参数与对象方法
  详细解决方案

JavaScript函数参数与对象方法

热度:76   发布时间:2023-06-13 11:42:19.0

有人可以向我解释何时使用函数通过将变量提供到括号中,以及何时在带有句点的变量之后添加函数,如使用toString()函数?

示例代码

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

我不确定我的语法是否正确,但我想知道何时将变量作为参数提供,例如我如何将变量num提供给addMe函数。 并且何时通过在变量之后放置一个句点并输入函数来使用函数.toString()。

如果我正确地构建了我的功能,我可以做这样的事吗?

var num = 1;
num.addMe();

谢谢您的帮助!

第一个用于简单的“独立”功能,而后者用于对象方法。 例如,默认情况下,数字对象具有toString()方法。 某些对象方法也可能需要在括号之间传递参数。

变量(函数声明只是存储在变量中的函数)在作用域链中查找(进入下一个外部作用域,直到找到具有该名称的变量):

 let a = 1; // outer scope

 { // inner scope
   console.log(a); // looked up in "inner scope", than "outer scope"
}

在对象原型链中查找对象的属性,如果这样做的话

a.b

然后a被在范围抬头如上所述,然后b是所得到的物体上访问(一切是在JavaScript对象,除了“无”( 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);

该拷贝的价值numa ,则增加a由一个,然后copues的值anum

当您执行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中,这称为原型。 Prototype是JavaScript从另一个获取某些功能的一种方式。 基本上:我有各种各样的功能,什么对象可以使用什么功能。 这被称为原型链。

在这两种情况下,您都在使用一个函数。 addMe是您创建的函数,toString是JavaScript中的一个函数,它通过此原型链放置在对象上。

我真的不确定我的语法是否正确

是的,你的语法是正确的。 addMe函数是在JavaScript中创建函数的标准方法。

但我想知道何时将变量作为参数提供,例如我如何将变量num提供给addMe函数。

就像你一样,你像你一样定义一个函数和参数。

..以及何时使用函数.toString()通过在变量后面加一个句点并输入函数。

如果要将函数放在对象上,以便该对象的所有实例都可以成为该对象。

在大多数情况下,特别是当你开始时。 您不必担心这些原型。 你的方式。

function addMe(number) {
  return number+1 
}

const answer = addMe(1) //2

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

  相关解决方案