使用Call方法引用对象中的属性-JavaScript

使用Call方法引用对象中的属性-JavaScript,javascript,Javascript,我的目标如下: myObject = { color: "yellow", age: 23, nationality: "usa", getAge: function(){ var age = 33; alert(age); } } 我可以调用getAge方法 我会在弹出框中找到33个 我想通过更改此引用的对象在警报框中得到23。我的想法如下 myObject.getAge.call(this); 我的理解是,通过将其传

我的目标如下:

myObject = {
    color: "yellow",
    age: 23,
    nationality: "usa",
    getAge: function(){
        var age = 33;
        alert(age);
    }
}
我可以调用getAge方法

我会在弹出框中找到33个

我想通过更改此引用的对象在警报框中得到23。我的想法如下

myObject.getAge.call(this);
我的理解是,通过将其传递给call方法,我将getAge方法中的this的引用更改为myObject的引用,这将允许警报框返回23。不幸的是,结果仍然是33

如何将此引用更改为myObject的引用

如果有一个构造器,你会感觉更好,因为这里的构造器已经被弄坏了。看看其他答案,看看这是怎么回事


你可以这样做:

function getAge(){
  alert(this.age)
}

myObject = {
    color: "yellow",
    age: 23,
    nationality: "usa"
}

getAge(myObject) // Alerts undefined

getAge.call(myObject) // Alerts 23
通过这种方式,您可以使用具有age属性的所有类型的对象

这是一个正在运行的检查浏览器控制台,为什么不简单:

myObject = {
    color: "yellow",
    age: 23,
    nationality: "usa"
}
myObject.getAge = function() { return myObject.age; };

如果不改变getAge,你就不能。age将始终引用可能的最小范围,该范围始终是本地范围。当访问这个年龄时,情况就不同了,正如查理·布朗在他的回答中所做的那样——这实际上允许切换范围。但是局部变量var age将不再起作用。如何将this引用更改为myObject的引用您现有的myObject.getAge示例已经将其设置为myObject。您需要更改您的函数以使用this.age,而不是在函数中使用局部变量。-1:语法错误,不需要与对象解耦来实现这一点,因为未定义的示例毫无意义。感谢您提供语法错误提示。我不鼓励这种方法,但它尽我所能接近OP想要的
function person(){
    this.color = "yellow";
    this.age = 23;
    this.nationality = "usa";
}
person.prototype.getAge = function(){
    alert(this.age);
};

var p = new person();
p.getAge();
function getAge(){
  alert(this.age)
}

myObject = {
    color: "yellow",
    age: 23,
    nationality: "usa"
}

getAge(myObject) // Alerts undefined

getAge.call(myObject) // Alerts 23
myObject = {
    color: "yellow",
    age: 23,
    nationality: "usa"
}
myObject.getAge = function() { return myObject.age; };