在分配原型之前,物业价值如何可用?

时间:2015-12-05 14:29:45

标签: javascript prototype

代码

function Cat(){
}
var c = new Cat();
console.log(c.name);
Cat.prototype.name = 'Snowflake';

输出

"Snowflake"

如上所示,即使我在分配"Snowflake"

之前记录了c.name,我也会获得Cat.prototype.name = 'Snowflake'的价值c.name

我知道变量和函数声明在运行时没有完成。但是分配和操作是在运行时完成的。我想知道我是如何获得Cat.prototype.name = 'Snowflake'的值的,因为BoxWeight(double w, double h, double d, double m)是一个赋值而不是一个声明。

1 个答案:

答案 0 :(得分:3)

如果您在控制台中运行它,您所看到的只是赋值操作的结果。

作为演示,您可以使用void来阻止最后一个表达式的结果。

void (Cat.prototype.name = 'Snowflake');

另一个示例是简单地将一些任意表达式作为最后一行。

function Cat(){
}
var c = new Cat();
console.log(c.name);
Cat.prototype.name = 'Snowflake';
123;

现在,控制台将显示123以及undefined,这是您实际的console.log()来电。

避免混淆的更好方法(除了不在控制台中单独测试代码之外),就是在日志中添加一些标记文本。

function Cat(){
}
var c = new Cat();
console.log("The name is:", c.name);
Cat.prototype.name = 'Snowflake';

现在您可以区分最后一个表达式的结果和实际日志。它应该看起来像:

The name is: undefined
"Snowflake"