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 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应