面向对象object与constructor
什么是constructor属性?它来自哪里?又将会指向何处?
function myfile(name,age){ this.webname = name; this.age = age; } myfile.prototype.getname = function () { return this.age; } var myfile1 = new myfile("zhang",3); console.info(myfile1.constructor); console.info(myfile.constructor); console.info(myfile.prototype.constructor);
这里我打印了在3种不同情况下所输出的constructor构造函数属性的内容,我将谷歌浏览器控制台打印出的结果截图如下:
是的正如我们看见的为什么console.info(myfile1.constructor);打印出的结果与console.info(myfile.prototype.constructor);打印出的结果会是一样的,而console.info(myfile.constructor);打印出的结果却是ƒ
Function() { [native code] },其实这个很好理解,如果你看了我的上一章讲解的javascript面向对象——prototype属性(原型属性)那么我相信这个地方就会很容易理解,其实我们首先要清楚constructor构造函数属性,它是谁的属性?它是原型属性prototype所指向的那个对象的属性。那么在这个对象中这个属性它又指向谁呢!?它指向的是构造函数也就是上面代码中的function
myfile(name,age){this.webname = name; this.age = age;}这一部分,其值就是这个构造函数中的对象。
那么肯定会有人疑问,既然
constructor构造函数属性 指向的是是构造函数,那么打印出的结果是构造函数这个可以理解但是为什么console.info(myfile.prototype.constructor);打印的也是构造函数呢!?它指向的可不是构造函数,是的我们知道实例化对象指向的一直都是prototype原型属性所指向的对象。如果想解决这个问题,那么我们首先应该弄明白两个问题。
1、实例化对象到底指向的是谁?
2、实例化对象到底继承的是谁?
首先我们还是用一个实例来引入,用图片看结果然后在总结:
代码部分:
function myfile(name,age){ this.webname = name; this.age = age; } myfile.prototype.getname = function () { return this.age; } var myfile1 = new myfile("zhang",3); console.info(myfile1.constructor);
总结:代码执行的结果在控制台上显示的内容如上图,打印出的是构造函数的代码也就是代码部分
function myfile(name,age){ this.webname = name; this.age = age; }
的的内容,有人肯定会想,哎!!!这不很明显嘛,实例化对象指向的就是构造函数啊!继承的也是构造函数。
那么我们来运行另外一句代码:console.info(myfile1.getname());打印出的结果却是3。
= function () {return this.age;}这个时候原型属性所指向的对象不仅包含了构造函数还包含了通过原型属性所创建出来的一些属性。
2、实例化对象到底继承的是谁?
ƒ Function() { [native code] } 。
Function() { [native code] } 就更好理解了,native code
的意思就是 本机代码 其实意思就是告诉我们,我们所执行的console.info(myfile.constructor);代码就是构造函数它自己本身,不能所执行这条代码会报错,只是控制台会更智能一些的告诉我们,我们需要打印的就是它自己而已。
---------------------
作者:待归魔帝
来源:CSDN
原文:https://blog.csdn.net/zhj145236/article/details/77477057
版权声明:本文为博主原创文章,转载请附上博文链接!