为什么函数getVehicleName会在Vehicle对象中打印全局变量vehicleName而不是变量vehicleName?

时间:2019-04-08 07:30:26

标签: javascript

我在全局范围内和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”的方式?

4 个答案:

答案 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)

以下是您获得道奇的原因。

  1. printVehicleName()将始终引用全局变量(即使已将其分配给对象中的方法)
  2. 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();