js原型中一个奇怪的问题

haichao0991 2019-08-01 11:38:11
直接贴代码和结果
function Motor_Vehicle(mytype){
this.type=mytype;
}
function Car(){
this.Color='red';
this.Num=4
}
Car.prototype=new Motor_Vehicle("轿车");
var car1=new Car();
console.log(car1)//结果可以看到_proto_中有owner属性,值为王五
console.log(car1.__proto__.owner)//这里也能打印出来结果
console.log(car1.owner)//这里就是undefined了
Car.prototype.owner="王五";//王五在这里定义赋值的,按照GO的顺序,应该是前面三行中,都可以看到owner,但是没有值才对,为什么前两条有值,而最后一条为undefined呢?
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38105488 2019-08-01
  • 打赏
  • 举报
回复

       var obj = {
		name: 'test'
	}

	setTimeout(() => {
		obj.name = 'tttzy1';
		console.log('test1')
	}, 500);
	console.log(obj);
定时器执行完之前点开还是原来的值; 等到定时器执行完在点开输出的对象,值时变化后的;
scscms太阳光 2019-08-01
  • 打赏
  • 举报
回复
错了。
引用
console.log(car1)//结果可以看到_proto_中有owner属性,值为王五

其实控制台打印对象,只是一个地址引用。当你去展开时展示的是最终的结果。如果你要打印即时的结果应该使用JSON.stringify,比如:
function Motor_Vehicle(mytype){
this.type=mytype;
}
function Car(){
this.Color='red';
this.Num=4
}
Car.prototype=new Motor_Vehicle("轿车");
var car1=new Car();
console.log(JSON.stringify(car1.__proto__))//自然就不会有owner属性
console.log(car1.__proto__)//必须展开才能看到owner属性
Car.prototype.owner="王五";

这个问题老有人提。
天际的海浪 2019-08-01
  • 打赏
  • 举报
回复
在用console.log()输出数组或对象时,对象(数组)的属性有时是折叠不显示的。 如果你在console.log()输出之后改变了对象(数组)的属性,当你点击三角展开属性时,会重新读取对象(数组)当前的属性,也就是显示出来的是你点击三角展开时的属性,而不是执行console.log()时的属性。 解决方法是用console.log(JSON.stringify(obj));以字符串方式输出

87,989

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧