Javascript Object agregation:无法调用内部对象的方法

时间:2016-01-09 01:54:32

标签: javascript oop aggregation inner-classes

我正在启动Javascript,我对管理对象的方式感到很困惑。 在本文http://www.crockford.com/javascript/private.html之后,我使用此代码进行了一些测试:

flex: 0 0 auto

我在定义引入函数的行上得到var Person= function() { // Constructor function Person(name) { this.name = name; }; }; Person.prototype.hello= function() { return "Hello I am "+this.name; }; // Object containing other object var Couple= function() { // Constructor function Couple() { this.dad= new Person("Dad"); this.mom= new Person("Mom"); }; }; Couple.prototype.introduce= function() { return this.dad.hello(); }; var family = new Couple(); alert(family.introduce()); ...

我尝试在构造函数中保存此上下文,并在Uncaught TypeError: Cannot read property 'hello' of undefinedhello()方法中使用它,但这没有任何改变...... 我觉得愚蠢无法做出这些简单的伎俩,但我找不到明显的解决方案...... 我做错了什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

问题是你的内部提升函数只存在于私有范围内,并且即使它共享相同的名称也不会覆盖它的父级,因为它是新声明的

当您使用var fn = function () {}时,它将存在于已定义的

当您使用function fn () {}时,它将可用于上面编写的代码,因为它已被提升

例如:

doSomething(); // will actually perform correctly because definition below gets hoisted

function doSomething () {}
doSomething(); // will throw error because doSomething didn't get assigned yet, even though the variable doSomething was hoisted

var doSomething = function () {};