为了账号安全,请及时绑定邮箱和手机立即绑定

关于对象的constructor属性

关于对象的constructor属性

comlejade 2015-11-30 11:25:49
function Person(name,age,job){   this.name = name;   this.age = age;   this.job = job;   this.sayName = function(){     console.log(this.name);   }; }; var person1 = new Person("Ray",25,"Engineer"); person1.constructor;    //Person(name, age, job) person1.constructor === Person;   //true person1.constructor === Person(name, age, job);  //false那个person1.constructor输出的明明是Person(name, age, job);为什么person1.constructor === Person(name, age, job);返回的是false?那个Object也是一样:var person2 = new Object(); person2.constructor;     //Object() person2.constructor === Object();    //false person2.constructor === Object;       //true这个搞得我有点晕了。。。
查看完整描述

3 回答

?
慕婉清01272

TA贡献1条经验 获得超0个赞

实例person1的构造函数和你后来手写的Person不是同一个内存空间,比如你爸叫李刚,不能所有的李刚都是你爸吧?
查看完整回答
反对 回复 2019-07-10
?
pardon110

TA贡献1038条经验 获得超227个赞

注意person1.constructor指向的是实例person1的构造函数,准确的说是function Person(name,age,job){}是,函数声明。

查看完整回答
反对 回复 2015-11-30
  • comlejade
    comlejade
    那为什么浏览器会返回那样的东东。。。
  • pardon110
    pardon110
    这样讲,你可能明白点。由于js函数可以存储在变量中。形如var a = function (){....}。为了便于识别,使用console.log(a)打印出来的是function(),只是为了告诉你变量a是一个匿名函数的引用。同理person1.constructor指向构造函数,你打印自然是Person(name, age, job),表明它指向的是一个名为Person的函数,有三个参数。 简单点,打印变量如果输出是类似这a()这样,像其它语言中函数调用的形式,则表明你打印的变量是一个函数变量。而并非是表示立即调用执行的函数。换句话使用打印出来的a()值与你在js中直接写的a()是有本质的区别,前者只能说是函数声明,是一个类表达式的东西。后者则是函数的调用。即回到原点:function a(){...}与a()是否全等?! 建议查阅js中函数表达式与函数的区别,更深入一点的,你可能还要看执行环境,变量对象及活动对象相关的资料。
?
comlejade

TA贡献2条经验 获得超0个赞

565bd1510001e3a105000359.jpg

565bd1510001897105000237.jpg


在不同的控制台中显示的是不一样的哈,chrome返回的是那个函数,而firebar返回的是那个Person(name,age,job);如果是按chrome那个就好理解了,但是那个firebar为什么会出现那种情况?


查看完整回答
反对 回复 2015-11-30
  • 3 回答
  • 0 关注
  • 1828 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信