Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/379.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
为什么console.log不';打印整个对象时,是否在javascript中显示原型添加的属性值?_Javascript - Fatal编程技术网

为什么console.log不';打印整个对象时,是否在javascript中显示原型添加的属性值?

为什么console.log不';打印整个对象时,是否在javascript中显示原型添加的属性值?,javascript,Javascript,我知道Prototype用于添加属性或方法,JavaScript对象从Prototype继承属性和方法 var Person=function (name) { this.Fname=name; this.health=100; }; //create object of Person var Mateen=new Person("Mateen"); var Fariza=new Person("Fariza"); console.log(Mateen); console.log(Fa

我知道Prototype用于添加属性或方法,JavaScript对象从Prototype继承属性和方法

var  Person=function (name) {

this.Fname=name;
this.health=100;

};
//create object of Person
var Mateen=new Person("Mateen");
var Fariza=new Person("Fariza");


console.log(Mateen);
console.log(Fariza);

//output { Fname: 'Mateen', health: 100 }
         { Fname: 'Fariza', health: 100 }

//Adding method by prototype
Person.prototype.attack=function  attack(target) {
target.health-=2;
}

Fariza.attack(Mateen);

console.log(Mateen);
console.log(Fariza);

//output: { Fname: 'Mateen', health: 98 }
          { Fname: 'Fariza', health: 100 }

//adding proterty by prototype
Person.prototype.level=1;

console.log(Mateen);
//output: { Fname: 'Mateen', health: 98 }

在最后一个输出中,为什么打印整个对象时不显示级别。它确实显示何时使用console.log(Mateen.level)。

我想这可能取决于浏览器,但在Chrome中,您可以通过直接在控制台中展开
\uuuuuuu proto\uuuuu
-对象来查看它

Firefox中,您可以单击输出,并在右/底部获得与chrome类似的输出

Safari与Chrome类似


不幸的是,我无法验证IE/Edge

我想这可能取决于浏览器,但在Chrome中,您可以通过直接在控制台中展开
\uuuuu proto\uuu
-对象来查看它

Firefox中,您可以单击输出,并在右/底部获得与chrome类似的输出

Safari与Chrome类似

<>遗憾太长了,读不下去了,我不能验证I/EDGE

< P>(Ed:TL;DR是由于继承和原型链。控制台。不记录继承的属性,但可以记录原型,可以扩展找到这些。)< /P> 您正在修改原始
Person
函数的原型对象,而不是您创建的实例。当控制台记录实例时,您只是记录实际对象的属性,而不是那些从原型继承的属性。 如果访问
Mateen
level
属性(如示例所示),Javascript将在对象上查找该属性&如果未找到,则向下查找原型链并在那里找到它

console.log(Mateen.level)   // 1 : Value is actually coming from Mateen.__proto__.level 
如果要显式地将属性添加到
Mateen
,那么它将显示在您的console.log中,而
Fariza
仍将从原型继承它

Mateen.level = 10;
console.log(Mateen);   // { Fname: 'Mateen', health: 100, level: 10 }

console.log(Fariza);   // { Fname: 'Mateen', health: 100}
console.log(Fariza.level)   // 1 : Taken from Fariza.__proto__.level

(太长了,读不下去了。这是由于继承和原型链。控制台。不记录继承的属性,但可以记录原型,可以扩展找到这些。) 您正在修改原始

Person
函数的原型对象,而不是您创建的实例。当控制台记录实例时,您只是记录实际对象的属性,而不是那些从原型继承的属性。 如果访问
Mateen
level
属性(如示例所示),Javascript将在对象上查找该属性&如果未找到,则向下查找原型链并在那里找到它

console.log(Mateen.level)   // 1 : Value is actually coming from Mateen.__proto__.level 
如果要显式地将属性添加到
Mateen
,那么它将显示在您的console.log中,而
Fariza
仍将从原型继承它

Mateen.level = 10;
console.log(Mateen);   // { Fname: 'Mateen', health: 100, level: 10 }

console.log(Fariza);   // { Fname: 'Mateen', health: 100}
console.log(Fariza.level)   // 1 : Taken from Fariza.__proto__.level

因为在每个对象的原型链上都有一公吨的东西,所以打印这些东西并没有多大帮助。但它不应该只是显示出来,而不管它是否有用。这取决于浏览器。对于
console.log
应该做什么没有官方定义。一些浏览器允许您以交互方式扩展和挖掘原型链;其他人没有。对,事实上我试过intelliJ IDEA和谷歌chrome浏览器都没有显示,所以我想如果有特殊原因的话。感谢您的澄清。请尝试console.dir,而不是console.log,因为每个对象的原型链上都有一公吨的东西,并且打印这些东西都不会有什么帮助。但它不应该只是显示出来,而不管是否有用。这取决于浏览器。对于
console.log
应该做什么没有官方定义。一些浏览器允许您以交互方式扩展和挖掘原型链;其他人没有。对,事实上我试过intelliJ IDEA和谷歌chrome浏览器都没有显示,所以我想如果有特殊原因的话。感谢您的澄清。请尝试console.dir,而不是console.log