javascript - 关于原型prototype

查看:81
本文介绍了javascript - 关于原型prototype的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

为什么下面代码的输出结果的情况会不一样:

var Box = {};
box.prototype.name = "xee";
box.prototype.study = {
   return this.name;
}
var box = new Box();
alert(box.prototype);  //结果是Undefiled
alert(box.constructor);  //这个却是 Object,constructor不也是要通过_proto_指针访问的吗?为什么他却不是Undefiled

解决方案

你没发现你这段代码根本运行不了吗,有报错的。
首先有关错误:
1,你想写在box原型上的study()函数格式就错了,导致this报错,应该是box.prototype.study = function(){return this.name;}
2,在修改完了问题1之后,第二行的prototype属性会报错,因为box不是函数(构造函数),而函数才有prototype属性,所以box没有prototype属性,因此在上面再添加name属性与study函数便会报错。
3,Box也不是构造函数,所以根本不能在上面new出对象,会直接报错。
其次你的结果:
1,上面第2点已说明,box没有prototype属性,所以alert(box.prototype)结果是undefined。
2,根据上面的第三点,box根本没有指向任何new出来的对象。所以也不会是Object,至于你的Object是怎么来的,我比较好奇。
另外,根据你的意图,我猜你是想将Box作为构造函数,并给其原型对象添加name属性与study方法吧,然后new出Box对象,看new出来的对象的prototype属性与constructor属性吧,如果是这样,正确的写法应该是:
function Box(){}
Box.prototype.name="xee";
Box.prototype.study= function(){

return this.name;

}
var box = new Box();
alert(box.prototype);
alert(box.constructor);
这样的话,box.constructor的值就是function Box(){}也就是构造函数了,当然也是Object

这篇关于javascript - 关于原型prototype的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆