Javascript 调用()不适用于从函数构造函数创建的对象

Javascript 调用()不适用于从函数构造函数创建的对象,javascript,object,constructor,prototype,call,Javascript,Object,Constructor,Prototype,Call,我在JS中创建了一个名为House的构造函数 function House(color, floor, location){ this.color = color; this.floor = floor; this.location = location; } 使用这个原型,我又创建了两个对象,分别命名为myHouse和myldhouse var myHouse = new House('brick red', '1st floor', 'saltlake');

我在JS中创建了一个名为
House
的构造函数

function House(color, floor, location){
    this.color = color;
    this.floor = floor;
    this.location = location;    
}
使用这个原型,我又创建了两个对象,分别命名为
myHouse
myldhouse

var myHouse = new House('brick red', '1st floor', 'saltlake');
var myOldHouse = new House('Yellow', '2st floor', 'Koikhali');
然后,我在
myHouse
对象中添加了一个名为address的新方法

myHouse.address = function(address){
   this.address = address;
   console.log('My address is '+this.address); 
}
现在,我想使用call函数将此方法添加到
myolhouse
对象中

myHouse.address.call(myOldHouse, '2G');

但是当我调用myolhouse.address()时,它显示错误

我喜欢你的方法,这是传统的方法。请使用setAddress或类似的东西

错误: -同一级别上不能有同名的方法和变量。 调用setter函数setAddress。 -不要在对象(类的实例)上附加新方法,直接在类上执行。 试试这个:

功能房(颜色、楼层、位置){
这个颜色=颜色;
这个地板=地板;
这个位置=位置;
this.address=“”;
}
地址=功能(颜色、楼层、位置、地址){
呼叫(这个、颜色、楼层、位置);
this.address=地址;
console.log('我的地址是'+this.address+“颜色是:”,this.color);
};
var myHouse=新地址(“砖红色”、“一楼”、“盐湖城”、“country1”);
var Myolhouse=新地址(“黄色”、“2层”、“Koikhali”和“country2”);

//myHouse.setAddress(“新地址”)
调用
在方法中调用时(在您的情况下是
地址
),只会告诉方法应该运行的范围。当经过MyolHouse时,address方法中的
this
关键字引用MyolHouse对象。所以现在myolhouse.address必须打印出“2G”。在本例中,您正在访问一个对象无法访问的方法。根本原因是myHouse和myldhouse这两个对象之间没有共享方法
address
。您已经从
House
函数创建了这些对象,这意味着这两个对象将可以访问与
House
相关联的所有属性。在您的示例中,您已经将
address
方法关联到myHouse,该方法限制了它对从
myHouse
函数创建的对象的访问

myHouse.address.call(myOldHouse, '2G');
例如:

var myHouseChild=新myHouse(…)

现在,myHouseChild对象将可以访问
House
myHouse
函数的属性

为了使MyLDhouse的
address
方法有效,您必须在
House
函数的原型中设置它,以便在对象之间共享它

比如,House.prototype.address=()=>{}


有关
new
关键字的内部工作,请参阅答案。

因为在address函数中,您将address设置为参数,然后运行调用,但address value不再是函数。我尝试了您的解决方案,但未捕获类型错误:无法在script处设置未定义的属性“setAddress”。js:27I更新了答案。我必须说,最大的错误是将method附加到对象(类的实例)上,您需要在类上执行它。我知道,我写代码的方式并不常见。但在这里,我尝试使用call方法从另一个对象借用方法。我的目标是应用调用()。不要使用prototype创建方法。谢谢。我只是想知道这个原因。