按直接的理解,构造函数应该是new一个实例的时候被调用的,所以如果原型里定义了一个构造函数,那么之后的new操作,应该是去调用这个函数的。下面的代码,B的原型指向A的实例,所以它的构造函数也是指向function A(),但是new B()实际上还是调用function B()
function A()
{
this.name = "A";
}function B()
{
this.name = "B";
}B.prototype = new A();var b = new B();
alert(b.constructor); // 显示function A()
alert(b.name); // B;下面的代码,把B原型的构造函数指向C,但是new B()并没有调用function C()
function A()
{
this.name = "A";
}function B()
{
this.name = "B";
}function C()
{
this.name = "C";
}B.prototype = new A();
B.prototype.constructor = C;var b = new B();
alert(b.constructor); // 显示function C()
alert(b.name); // B
所以问题就来了,这个prototype.constructor有什么作用?或者说,它什么时候会起作用?
function A()
{
this.name = "A";
}function B()
{
this.name = "B";
}B.prototype = new A();var b = new B();
alert(b.constructor); // 显示function A()
alert(b.name); // B;下面的代码,把B原型的构造函数指向C,但是new B()并没有调用function C()
function A()
{
this.name = "A";
}function B()
{
this.name = "B";
}function C()
{
this.name = "C";
}B.prototype = new A();
B.prototype.constructor = C;var b = new B();
alert(b.constructor); // 显示function C()
alert(b.name); // B
所以问题就来了,这个prototype.constructor有什么作用?或者说,它什么时候会起作用?
解决方案 »
- ext里面的各个js文件有的功能包含
- 求助: JS 获取 京东商城 图书产品页 产品价格 请帮忙
- jquery中,如何判定元素是否是隐藏的
- 如何在ext.panel上实现鼠标右击事件并取得这个事件~~急~~在线等!!!!!
- 如何在Alpha形成的透明效果上添加亮点
- 通过游览器判断语言跳转到指定页面的问题
- 请教一下<SCRIPT LANGUAGE="JavaScript" SRC="OnLineShortMessage\sms.asp"></SCRIPT>
- 【求助】关于实现图片直接另存(下载)的问题!
- 下拉框的问题。
- 同时使用两个jquery插件,其中一个插件的部分效果失效!深夜跪求大神。。
- jquery.mobile网页乱码!
- 后台post请求传值(字符串),前台request.getParameter只能获取内容的一部分,有人遇到过这种情况吗?
每一个函数对象A默认有一个原型对象A.prototype,而这个原型对象A.prototype上有一个默认的属性A.prototype.constructor是指向这个函数对象A的。A的实例的constructor属性,其实就是A的原型上的constructor属性,默认是A这个函数对象。function A()
{
this.name = "A";
}
alert(new A().constructor);所以,上面这段代码的结果是
function A()
{
this.name = "A";
}以你的第一段代码为例,
B.prototype = new A();
这句话改变了函数B的默认原型对象,B的新原型对象是构造函数A的一个实例,所以,b.constructor其实是A的实例的constructor属性,而A的实例的constructor属性,就是A的原型的constructor属性,即A这个函数对象。总结:在不改变构造函数原型的情况下,构造函数的实例的constructor属性指向构造函数对象。
function fatherFn() { }
sonFn.prototype = new fatherFn();
//sonFn.prototype.constructor = sonFn; //这句话将原型的constructor 设置回默认的 sonFn
var newSonFn = new sonFn();
alert(newSonFn.constructor);貌似这种场景一般在写js库的时候会经常用到。
能力有限,只能帮你到这儿了...
function fatherFn() { }
sonFn.prototype = new fatherFn();
//sonFn.prototype.constructor = sonFn; //这句话将原型的constructor 设置回默认的 sonFn
var newSonFn = new sonFn();
alert(newSonFn.constructor);貌似这种场景一般在写js库的时候会经常用到。
能力有限,只能帮你到这儿了...