iteye_3775 2010-09-28 10:38
浏览 425
已采纳

JavaScript里constructor的问题

[code="javascript"]
var F = function(){}
var f = new F();
alert(f.constructor);
[/code]
[code="javascript"]
function F(){}
var f = new F();
alert(f.constructor);
[/code]
上面两个打印出来的值不同,请问为什么?希望能给我constructor的详细资料。谢谢。

  • 写回答

1条回答 默认 最新

  • cyrilluce 2010-09-30 12:09
    关注

    显示的不同,但实质是一样的
    你试试这个就知道了:
    [code="js"]
    var A = function(){};
    function B(){}
    alert(A);
    alert(B);
    [/code]

    JS中的constructor本身本无多大用处,也可以被随意修改。
    之所有创建出来的实例都能通过constructor访问到构造方法,是因为:
    函数(F)在定义时,会自动创建一个空对象作为prototype属性,它的constructor属性为自身。
    使用它(F)创建出来的实例本身并无constructor这个属性,而是它的原型链指向F.prototype,所以也能访问到。
    [code="js"]
    function F(){};
    alert(F.prototype.constructor === F);
    [/code]
    如果你改了prototype属性,就会发现construcotr不好使了:
    [code="js"]
    function F(){};
    F.prototype = {test:1};
    var a = new F();
    alert(a.constructor === Object.prototype.constructor);
    [/code]

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突
  • ¥15 超声波模块测距控制点灯,灯的闪烁很不稳定,经过调试发现测的距离偏大
  • ¥15 import arcpy出现importing _arcgisscripting 找不到相关程序