Javascript 具有此关键字的原型未给出预期结果

Javascript 具有此关键字的原型未给出预期结果,javascript,prototype,Javascript,Prototype,在javascript中,为什么会这样? 对我来说,我找不到任何解释 说 我来自C#,这个原型类似于javascript对象的默认构造函数值 因此,我在Chrome控制台中尝试以下操作: var ATestVariable = new ATest(); ATestVariable.atom //Result->undefined ATestVariable.electron //Result->undefined 这对我来说很奇怪,所以我尝试在全球范围内(不知道,也许使用它会产生一

在javascript中,为什么会这样? 对我来说,我找不到任何解释

我来自C#,这个原型类似于javascript对象的默认构造函数值

因此,我在Chrome控制台中尝试以下操作:

var ATestVariable = new ATest();
ATestVariable.atom
//Result->undefined
ATestVariable.electron
//Result->undefined
这对我来说很奇怪,所以我尝试在全球范围内(不知道,也许使用它会产生一些奇怪的赋值…)

这里也没有

现在,如果我尝试

var BTest = function(Atom, Electron)
{
    atomB = Atom;
    electronB = Electron;
}
BTest.prototype.atom = 'emptyAtomB';
BTest.prototype.electron = 12;
然后我做了

var BTestVariable = new BTest();
BTestVariable.atom
//Result->"emptyAtomB"
BTestVariable.electron
//Result -> 12
这是我得到的,也是我在这两种情况下所期望的

发生了什么事?

当你这样做的时候

var ATest = function(atom, electron)
{
    this.atom = atom;
    this.electron = electron;
}
ATest.prototype.atom = 'emptyAtomA';
ATest.prototype.electron = 1;
传递给构造函数的第一个和第二个参数将被分配给实例的属性(
this
),无论发生什么情况。如果不传递任何参数,那么独立变量
atom
electron
的值将是
未定义的
,因此实例最终拥有自己的属性
atom
electron
,它们的值是
未定义的

该实例仍然有一个内部原型对象,并且该内部原型具有属性值
emptyAtomB
12
,但由于该实例具有自己的同名属性,因此它们掩盖了内部原型上的属性

var-ATest=函数(原子、电子)
{
这个。原子=原子;
这个电子=电子;
}
ATest.prototype.atom='emptyAtomA';
ATest.prototype.electron=1;
var ATestVariable=new ATest();
log(ATestVariable.atom);

log(Object.getPrototypeOf(ATestVariable.atom)
在调用
新ATest
时,您没有向构造函数传递任何参数,因此分配给
this.atom
this.electron
的值未定义

var-ATest=函数(原子、电子)
{
这个。原子=原子;
这个电子=电子;
}
//当值未传递给构造函数时
var ATestVariable=new ATest();
console.log(ATestVariable)
//当值传递给构造函数时
var BTestVariable=新的ATest(1,‘某些值’);

log(BTestVariable)
我还尝试了var testProto=function(){}testProto.prototype.var1='aaa',它在教程视频中工作,但在我的Chrome控制台中抛出了未定义的错误,这种情况如何?视频是10:51分钟,我想这个代码理论上是合法的,但它真的很奇怪。通常,您希望预先设置一个静态原型对象,一个永远不会发生变化的对象。构造函数应该几乎总是只改变它的实例(this)。在几乎所有情况下,构造器都不应该有改变内部原型的副作用。如果
aaa
是实例数据,应该放在实例上
this.var1='aaa'
var testProto=function(){}testProto.prototype.var1='aaa'
。。。您确实意识到
testProto
testProto
是完全不相关的东西,对吗?@LiquidCore请参阅上面的注释,确保使用相同的大写字母
var BTestVariable = new BTest();
BTestVariable.atom
//Result->"emptyAtomB"
BTestVariable.electron
//Result -> 12
var ATest = function(atom, electron)
{
    this.atom = atom;
    this.electron = electron;
}
ATest.prototype.atom = 'emptyAtomA';
ATest.prototype.electron = 1;