访问创建对象的范围内的JavaScript变量

时间:2018-02-12 22:44:02

标签: javascript scope this

使用new关键字创建对象时,除了传入调用上下文(this)之外,是否有任何方法可以访问创建它的范围中的变量。 / p>

例如,如果我有:

var parent = function() {
    this.parent_property = "Property set on parent object";
    this.kid = new child();
};

var child = function() {
    this.childMethod = function(){
        //how to return parent property
    }
};

var test = new parent();
console.log(test.kid.childMethod());

如何从parent_property访问childMethod?我能看到的唯一解决方案是将this传递给child的构造函数,如下所示:

var parent = function() {
    this.parent_property = "Property set on parent object";
    this.kid = new child(this);
};

var child = function(parent) {
    var parent = parent;
    this.childMethod = function(){
        return parent.parent_property;
        //how to return parent property
    }
};

var test = new parent();
console.log(test.kid.childMethod());

还有其他方法吗?这样做有没有下行/陷阱?

1 个答案:

答案 0 :(得分:1)

在以下代码中,没有父级或子级:

html body div ul li a {  }

这只是一个构造函数,你可以从另一个构造函数调用,但是那里没有inheritance,到目前为止,没有实例。

您当前的方法没有任何问题,但您可能对JavaScript中的prototypal inheritance有不正确的理解

这是MDN的例子

var Child = function() {
    this.childMethod = function(){
        // how to return parent property
    }
};

您向function Person(first, last, age, gender, interests) { this.name = { first, last }; this.age = age; this.gender = gender; this.interests = interests; }; Person.prototype.greeting = function() { alert('Hi! I\'m ' + this.name.first + '.'); }; 构造函数的原型添加方法,以便Person的每个实例都会立即继承Person方法。