Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用此函数从对象访问构造函数_Javascript_Function_Object - Fatal编程技术网

Javascript 如何使用此函数从对象访问构造函数

Javascript 如何使用此函数从对象访问构造函数,javascript,function,object,Javascript,Function,Object,在这个例子中。我需要从对象函数更新朋友列表 var MyClass = function () { this.friends = []; this.runtime = { add: function (name) { this.friends.push(name); } } }; MyClass.prototype.AddFriend = function (name) { this.runtime.add

在这个例子中。我需要从对象函数更新朋友列表

var MyClass = function () {
    this.friends = [];
    this.runtime = {
        add: function (name) {
            this.friends.push(name);
        }
    }
};

MyClass.prototype.AddFriend = function (name) {
    this.runtime.add(name);
};

MyClass.prototype.GetFriends = function () {
    return this.friends;
};

这是怎么可能的?

就像我在评论中说的,使用
this.friends.push(name)
更有意义,但是如果你真的必须使用这个奇怪的运行时函数,那么你需要将
this
的副本保存到一个新变量中:

var MyClass = function () {
    var _this = this;
    this.friends = [];
    this.runtime = {
        add: function (name) {
            _this.friends.push(name);
        }
    }
};

您也可以使用bind()方法:


请在此处阅读更多信息:

Urg。为什么不从该功能中执行
this.friends.push(name)
?你在那里遇到了各种各样的疯狂的背景问题。@Andy,我知道。但在我的大项目中。我无法更改总代码:(没问题。虽然@Andy正确地指出,你实际上应该使用这个.friends.push(name)…但是如果你真的无法避免像那样定义你的函数范围,那么它就会完成任务。
var MyClass = function () {
    this.friends = [];
    this.runtime = {
        add: function (name) {
            this.friends.push(name);
        }.bind(this)
    }
};

MyClass.prototype.AddFriend = function (name) {
    this.runtime.add(name);
};

MyClass.prototype.GetFriends = function () {
    return this.friends;
};