为什么我的JavaScript实例返回相同的结果?

为什么我的JavaScript实例返回相同的结果?,javascript,oop,Javascript,Oop,我试图创建一个名为myObjectConstructor的函数变量的两个实例constructorOne和constructorTwo。由于某些原因,在调用getProperty时,两个实例返回的结果相同 constructorOne.getProperty和constructorTwo.getProperty都会提醒这是属性二: 这是一本书 问题是,为什么constructorOne.getProperty不返回“this is property one”?self未定义,因此在init函数中

我试图创建一个名为myObjectConstructor的函数变量的两个实例constructorOne和constructorTwo。由于某些原因,在调用getProperty时,两个实例返回的结果相同

constructorOne.getProperty和constructorTwo.getProperty都会提醒这是属性二:

这是一本书

问题是,为什么constructorOne.getProperty不返回“this is property one”?

self未定义,因此在init函数中,这是窗口,所以您总是修改同一对象的属性

您似乎在做一些奇怪的混合模块模式和标准JavaScript构造函数函数。我强烈建议从这两种方法中选择一种并坚持下去

函数myObject构造函数{ this.myProperty=; } MyObjectConstructor.prototype.init=functionstr{ this.myProperty=str; }; MyObjectConstructor.prototype.getProperty=函数{ 返回此.myProperty; }; //实例化我们的构造函数 var constructorOne=新的MyObject构造函数; //更改第一个实例的myProperty init'this is property one'; //实例化构造函数的第二个实例 var constructorTwo=新的MyObject构造函数; constructorTwo.init'this is property two'; //提醒constructorOne实例的当前myProperty alertconstructorOne.getProperty; //提醒constructorTwo实例的当前myProperty
alertconstructorTwo.getProperty 更好的方法是使用适当的原型:

function MyObjectConstructor() {
    this.property = '';
}

MyObjectConstructor.prototype.init = function(newProperty) {
    this.property = newProperty;
};

MyObjectConstructor.prototype.getProperty = function() {
    return this.property;
};

因为您在两个对象中都引用了它,而这两个对象在第二个对象初始化时都被覆盖了。因为没有定义self,因此,getProperty在窗口的上下文中两次都被调用。这里解释了如何使用构造函数和原型:希望有帮助。如果我在原型中使用您的第一个选项,并且在我的对象中有需要相互调用的函数,我将如何做?假设我有两个函数:MyObjectConstructor.prototype.func1=functionstr{}MyObjectConstructor.prototype.func2=functionstr{如何从这里调用func1?}您继续使用以下函数获取对对象的引用:this.func1
alert(constructorOne.getProperty()); //this will alert 'this is property two'
alert(constructorTwo.getProperty()); //this will still alert 'this is property two'
function MyObjectConstructor() {
    this.property = '';
}

MyObjectConstructor.prototype.init = function(newProperty) {
    this.property = newProperty;
};

MyObjectConstructor.prototype.getProperty = function() {
    return this.property;
};