>我在全局范围内以及车辆对象内部声明了一个 vehicleName 变量,在全局范围内声明了一个 printVehicleName 并在 Vehicle 对象内声明了 getVehicleName。当我调用这两个函数时,两者都打印在全局范围内声明的车辆名称。为什么会这样?
//declaring a global variable
let vehicleName = "Dodge";
//declaring a method to print vehicleName
function printVehicleName(){
console.log(vehicleName);
}
//declaring a object using object literal notation
let Vehicle = {
vehicleName : "Ferrari",
getVehicleName : printVehicleName
};
//executing printVehicleName function
printVehicleName();
//executing getVehicleName function
Vehicle.getVehicleName();
我希望 getVehicleName 函数打印"法拉利",但是当我调用这两个函数时,两者都会打印在全局范围"闪避"上声明的车辆名称。谁能解释一下这样做的原因以及打印"Ferrai"的方法?
你得到道奇的原因。
-
printVehicleName()
将始终引用全局变量(即使它被分配给对象中的方法( Vehicle.getVehicleName()
与printVehicleName()
相同//declaring a global variable let vehicleName = "Dodge"; //declaring a method to print vehicleName function printVehicleName(){ console.log(vehicleName); // vehicleName is global variable } //declaring a object using object literal notation let Vehicle = { vehicleName : "Ferrari", getVehicleName : printVehicleName // Referring to the global function }; //executing printVehicleName function printVehicleName(); //executing getVehicleName function Vehicle.getVehicleName(); // This is == to printVehicleName()
若要使 Vehicle 对象打印自己的变量,需要使用this
变量。
简而言之,您不能对对象中的方法重用printVehicleName
,因为如果您打印this.vehicleName
,它将不再正常工作。
您需要在对象中采用不同的方法,如下所示。
let Vehicle = {
vehicleName: "Ferrari",
getVehicleName: function() { console.log(this.vehicleName); }
};
在你的函数中使用关键字this。
this.vehicleName
使用此选项可访问对象属性。
实际创建一个method
并使用this
将上下文设置为Vehicle
对象内的vehicleName
。
对象可以在创建之前引用其 self 属性
let vehicleName = "Dodge";
//declaring a method to print vehicleName
function printVehicleName() {
console.log(vehicleName);
}
//declaring a object using object literal notation
let Vehicle = {
vehicleName: "Ferrari",
getVehicleName: function() {
return this.vehicleName
}
};
//executing printVehicleName function
printVehicleName();
//executing getVehicleName function
console.log(Vehicle.getVehicleName());
您可以重复使用printVehicleName
.此行printVehicleName(vcName = vehicleName)
将采用默认vehicleName
但是从getVehicleName
调用时,您可以传递上下文
//declaring a global variable
let vehicleName = "Dodge";
//declaring a method to print vehicleName
function printVehicleName(vcName = vehicleName) {
return vcName;
}
//declaring a object using object literal notation
let Vehicle = {
vehicleName: "Ferrari",
getVehicleName: function() {
return printVehicleName(this.vehicleName)
}
};
//executing printVehicleName function
printVehicleName();
//executing getVehicleName function
console.log(Vehicle.getVehicleName());
我更改了车辆声明部分首先更改车辆名称的值,然后调用 printVehicleName 函数
let vehicleName = "Dodge";
//declaring a method to print vehicleName
function printVehicleName( ) {
console.log(vehicleName);
}
//declaring a object using object literal notation
let Vehicle = {
vehicleName:"Ferrari",
getVehicleName: function () { vehicleName = this.vehicleName; printVehicleName() }
};
//executing printVehicleName function
printVehicleName(vehicleName);
//executing getVehicleName function
Vehicle.getVehicleName();