我在全局范围内和Vehicle对象内部声明了一个vehicleName变量,在全局范围内声明了函数printVehicleName,在Vehicle对象内部声明了getVehicleName。 当我调用这两个函数时,都将打印在全局范围内声明的vehicleName。为什么会发生?
//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函数打印“ Ferrari”,但是当我调用这两个函数时,都将打印在全局范围“ dodge”上声明的vehicleName。谁能解释这个的原因以及打印“ Ferrai”的方式?
答案 0 :(得分:0)
您需要实际创建一个method
并使用this
将上下文设置为vehicleName
对象内的Vehicle
。
对象可以在创建之前引用其自身属性
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());
答案 1 :(得分:0)
在函数中使用关键字this。
this.vehicleName
使用它来访问对象属性。
答案 2 :(得分:0)
以下是您获得道奇的原因。
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); }
};
答案 3 :(得分:0)
我已更改车辆申报部分 首先更改vehicleName的值,然后调用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();