我为什么会收到此错误:Uncaught TypeError:无法读取未定义的属性“ john”

安迪

我是JavaScript新手,可能未使用正确的术语,因此请耐心等待。

http://jsbin.com/IPaDAJO/1/

我希望页面上显示以下内容。您好,我叫John Smith,今年29岁。您好,我叫Suzie Alport,今年24岁。

我想了解为什么Suzie不能提及John的招呼方法?

<script>
        var employees = {
            john: {
                name: "John Smith",
                age: 29,
                job: "web developer",
                greet: function(){
                    document.write("Hello my name is " + this.name + " and I am " + this.age + " years old. ");
                }
            },
            suzie: {
                name: "Suzie Alport",
                age: 24,
                job: "nursery assistant",
                greet: employees.john.greet
            }
        };
        employees.john.greet();
        employees.suzie.greet();
</script>

谢谢

TJ人群

截至您创建要分配给suzie属性的对象的时间employeesundefined在完成整个表达式之前,将对属性初始化程序进行求值。

这是上面发生的事情的顺序:

  1. 引擎创建一个employees具有初始值的变量undefined
  2. 引擎会创建一个空白对象(最终将分配给employees)。
  3. 引擎创建另一个空白对象(最终将成为john属性值)。
  4. "John Smith"在名为#3的空白对象上评估并创建一个属性name,为其赋予该值。
  5. 它重复了这一过程agejobgreet
  6. 它将对象分配给john上面#2中的对象属性。
  7. 它创建另一个空白对象(成为suzie)。
  8. "Suzie Alport"在名为#的对象上评估并在该对象上创建属性name,并为其赋予该值。
  9. 它重复了age的过程job
  10. 它尝试对表达式求值,但employees.john.greet由于employees,因此失败undefined

如果将它分成两部分,它将起作用(直到document.write炸毁为止):

var employees = {
    john: {
        name: "John Smith",
        age: 29,
        job: "web developer",
        greet: function(){
            document.write("Hello my name is " + this.name + " and I am " + this.age + " years old. ");
        }
    }
};
employees.suzie = {
    name: "Suzie Alport",
    age: 24,
    job: "nursery assistant",
    greet: employees.john.greet
};
employees.john.greet();
employees.suzie.greet();

之所以可行employees.john.greet,是因为在我们尝试评估之前,已将对上面#2中创建的对象的引用分配给该employees变量。


边注:

避免document.write在现代网页和应用程序中使用。而是使用DOM方法document.write仅在初始页面加载期间以您可能希望的方式工作初始页面加载后,它将完全擦除现有文档,并开始在同一窗口中写入新文档。

例如,您可以document.body像这样添加段落

function display(msg) {
  var p = document.createElement('p');
  p.innerHTML = String(msg);
  document.body.appendChild(p);
}

以上两个示例的实时示例

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Uncaught TypeError:无法读取未定义的属性“ linear”

Javascript Uncaught TypeError:无法读取未定义的属性“ 0”

jQuery Uncaught TypeError:无法读取未定义的属性“替换”

Ember Uncaught TypeError:无法读取未定义的属性“ yield”

收到TypeError:无法读取未定义的属性“查询”

Uncaught TypeError:无法读取未定义的属性“轴”

为什么TypeError:无法读取未定义的属性“ 0”?

操作SDK会收到此错误TypeError:无法读取未定义的属性“输出”

为什么我会收到TypeError:即使我的Web元素引用正确,也无法读取未定义错误的属性“ getText”?

我收到此错误“ TypeError:无法读取未定义的属性'pagination'”

无法读取未定义的push属性?即使我将评论推送到评论数组,为什么仍会收到此错误?

Leaflet Uncaught TypeError:无法读取未定义的属性“ geosearch”

我在我的React项目上收到此错误“ TypeError:无法读取未定义的属性'map'”

Uncaught TypeError:无法读取未定义的属性“结果”-ReactJS

为什么我会收到Uncaught TypeError:无法在分配时读取未定义的属性“ 0”?

Ajax Uncaught TypeError:无法读取未定义的属性“长度”

ReactJS Uncaught TypeError:无法读取未定义的属性“concat”

Electron JavaScript Uncaught TypeError:无法读取未定义的属性“on”

为什么我会收到此错误“NameError:name 'self' 未定义。”

Javascript Uncaught TypeError:无法读取未定义的属性

Javascript Uncaught TypeError:无法读取未定义的属性“推送”

nodejs 收到错误 TypeError:无法读取未定义的属性“then”

我收到此错误 => TypeError:无法读取未定义的属性“图像”

为什么我会收到此“主页未定义无未定义”错误

为什么我会收到 TypeError:无法读取未定义的 react-router-dom 的属性“push”

为什么我收到错误 - TypeError:无法读取未定义的属性“名称”

为什么我会收到“类型错误:无法读取未定义的属性‘发送’”?

反应 - 错误:TypeError:无法读取未定义的属性(读取“then”)

“TypeError:无法读取未定义的属性(读取'hasOwnProperty')”错误