Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.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_Oop - Fatal编程技术网

类/对象实例化后,javascript如何调用新添加的方法?

类/对象实例化后,javascript如何调用新添加的方法?,javascript,oop,Javascript,Oop,请帮助我了解这是怎么发生的 在myObject被实例化之后,我如何可能向我的原始类/对象构造函数添加新方法并获得这两个结果 我希望我必须将mathX实例化为myObject2才能让它工作 //使用属性和方法创建类/对象 函数mathX(num1,num2){ 该系数=10; this.num1=num1; this.num2=num2; this.multiplySum=函数(){ 返回值(this.num1+this.num2)*this.factor; } } //使用属性和方法实例化类/

请帮助我了解这是怎么发生的

在myObject被实例化之后,我如何可能向我的原始类/对象构造函数添加新方法并获得这两个结果

我希望我必须将mathX实例化为myObject2才能让它工作

//使用属性和方法创建类/对象
函数mathX(num1,num2){
该系数=10;
this.num1=num1;
this.num2=num2;
this.multiplySum=函数(){
返回值(this.num1+this.num2)*this.factor;
}
}
//使用属性和方法实例化类/对象
var myObject=new mathX(5,5);
document.write(“multilysum result=“+myObject.multilysum()+”
”; //实例化后向类/对象添加新方法 mathX.prototype.sumAll=函数(){ 返回this.num1+this.num2+this.factor; } //立即对以前实例化的类/对象使用新方法 document.write(“sumAll结果=“+myObject.sumAll()+”
”); //这怎么可能?这不应该失败吗?
//类/对象实例化后,javasript如何调用新添加的方法?
因为继承是“活动的”,所以它可以工作

当您创建从另一个对象B继承的对象A时,A不会在本地存储B的属性副本。相反,它只是在其[[Prototype]]中引用了B

然后,当您尝试访问a上的某个属性,但没有具有该名称的自己的属性时,将改为咨询B

因此,当您更改一个对象时,您可能会影响从该对象继承的所有对象

var obj={};
console.log(obj.foo);//未定义
Object.prototype.foo=“bar”;

console.log(obj.foo);//“bar”
是,因为javascript对
对象使用相同的引用。如果你不想这样做,你需要创建一个深度副本。myObject是对mathX对象的引用,然后你改变了它所以在某种程度上你是说对象a和对象B都存在…但是它们之间有一个引用-即使它们有相同的名称?因此,在我的示例中,我将mathX.prototype.sumAll()作为一个新方法附加到原始对象……它是否作为原始mathX对象的改进副本存储在某个地方?感谢您的解释。
sumAll
存储为
mathX.prototype
的属性。它可能在继承自
mathX.prototype
的所有对象上都可用,即使它们是以前创建的。我肯定也有定义问题。我认为sumAll()是一种方法。但我想我也不理解javascript引用对象“活动”的方式——我以前的理解是,它们像文档一样一次又一次地写入内存。我想这可能是因为首先学习PHP,或者仅仅是作为一个noob:-J@n8thanael作为属性值的函数称为“方法”。所以
mathX.prototype.sumAll
是一种方法,是的。谢谢。因为我是新来的,所以我在术语中迷失了方向。我想也许我也错了——或者也许因为JavaScript中的所有内容都是对象而不是PHP,所以我应该在JS中以不同的方式引用方法。我非常感谢你的帮助,希望我能在将来回馈社会。