为什么我的对象的属性没有记录到控制台?

Why aren't the properties of my object logged to the console?

下面,我构建了一个名为 person 的对象,我想将它的名字和姓氏(结合一些字符串)记录到控制台,但它不起作用。如果有人能帮助我,我会很高兴。先感谢您。

function person(last, first, birth, marriage) {
this.lastName = last;
this.firstName = first;
this.birthDate = birth;
this.married = marriage;
}

var lovely = new person("Doughnut", "Glazed", "7-8-1990", true);

var callPerson = function(){
console.log("Hey " + person.firstName + " " + person.lastName);
}

callPerson(lovely);

您遇到范围界定问题:

var callPerson = function(person /* argument needs to be here */){
    console.log("Hey " + person.firstName + " " + person.lastName);
}

所以person是函数,不是对象lovely


次代码风格备注:类一般都是大写,就是为了避免这种混淆。请改用 function Person () {/**/}

它没有被记录,因为在 callPerson 中,变量 person 引用函数(构造函数)person,因为这个名称在功能。这意味着您指的不是某个特定实例,而是 class。将一个实例作为参数传递不会改变这一点,因为函数不需要它;实际上,传递的参数不以任何方式使用。

将此视为尝试记录 class 属性,而不是一个实例。

按以下方式更改 callPerson 应该可以解决您的问题。请注意,现在访问的字段来自参数 p.

var callPerson = function(p){
    console.log("Hey " + p.firstName + " " + p.lastName);
}

lovely 参数存储在哪 应该有参数存储和使用

function person(last, first, birth, marriage) {
this.lastName = last;
this.firstName = first;
this.birthDate = birth;
this.married = marriage;
}

var lovely = new person("Doughnut", "Glazed", "7-8-1990", true);

var callPerson = function(obj){
console.log("Hey " + obj.firstName + " " + obj.lastName);
}

callPerson(lovely);