Javascript 使用';这';嵌套原型子对象内

Javascript 使用';这';嵌套原型子对象内,javascript,prototype,Javascript,Prototype,我有一个类,并为其原型提供了几个子对象,以方便名称空间。这些子对象具有方法。我不知道如何在这些方法中使用this来访问构造函数设置的属性 我有一种感觉,bind、call和apply都涉及到了某种程度,但我很难理解它们是做什么的,以及所有这些OOP的工作原理。有很多资源,但它们要么太低级,要么太高级,我不理解。谢谢大家! function Object( argument1, argument2 ){ this.property1 = argument1; th

我有一个类,并为其原型提供了几个子对象,以方便名称空间。这些子对象具有方法。我不知道如何在这些方法中使用
this
来访问构造函数设置的属性

我有一种感觉,
bind
call
apply
都涉及到了某种程度,但我很难理解它们是做什么的,以及所有这些OOP的工作原理。有很多资源,但它们要么太低级,要么太高级,我不理解。谢谢大家!

function Object(
    argument1,
    argument2
){
    this.property1  = argument1;
    this.property2  = argument2;
}

Object.prototype    = {
    subObject1  : {
        method1 : function(){
            return this.property1;
        }
    },
    subObject2  : {
        method1 : function(){
            return this.property2;
        }
    }
}

var foo = new Object(11, 22);
var bar = new Object(33, 44);

console.log(foo.subObject1.method1()); //I'd like this to return 11
console.log(foo.subObject2.method1()); //I'd like this to return 22

console.log(bar.subObject1.method1()); //I'd like this to return 33
console.log(bar.subObject2.method1()); //I'd like this to return 44

无论何时调用
foo.bar()
bar
将引用
foo
除非使用
.bind
将函数绑定到特定值,或者使用ES6中的新“arrow”函数

因此,一种解决方案是将方法绑定到特定实例。但是,在调用构造函数之前,实例并不存在。这意味着您必须在构造函数中创建
子对象x

function MyObject(argument1, argument2) {
    this.property1  = argument1;
    this.property2  = argument2;

    this.subObject1 = {
        method1: function(){
             return this.property1;
        }.bind(this)
    };

    this.subObject2 = {
        method1: function(){
            return this.property2;
        }.bind(this)
    };
}
或使用新的ES6箭头功能;这些函数从创建它们的上下文中获取
this
(与正常函数不同):

这意味着每个实例都有自己的子对象副本

但是,如果要在原型上定义方法,则必须始终通过
.call
.apply
传递接收器:

foo.subObject1.method1.call(foo);

在这种情况下,将其分配给原型没有多大好处,您可以只使用一个简单的函数来接受对象(
method1(foo)
)。

您想要这样的东西吗?更好的方法可能是,我忘记了self关键字!我来试一试。可能是或的复制品
foo.subObject1.method1.call(foo);