博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解constructor属性
阅读量:4325 次
发布时间:2019-06-06

本文共 1598 字,大约阅读时间需要 5 分钟。

constructor属性始终指向创建当前对象的构造函数

一般情况下的constructor的属性非常容易理解。

var arr=[1,2,3,4,5];//等价于var arr=new Array(1,2,3,4,5); alert(arr.constructor===Array)//true var Foo=function(){}//等价于var Foo=new Function(){}; alert(Foo.constructor===Function);//true //由构造函数实例化一个obj对象 var obj=new Foo(); alert(obj.constructor===Foo);true alert(obj.constructor.constructor===Function);true

但constructor遇到prototype时,有几点需要理清。

1.每个函数(F)都有一个默认的属性prototype,而这个prototype的constructor默认指向这个函数(F)。

function Person(name){
this.name=name; }
Person.prototype.getName=function(){return this.name;}
var me=new Person('asan'); alert(me.constructor===Person);//true alert(Person.prototype.constructor===Person)//true

2.当我们重定义构造函数的prototype属性时,注意constructor属性此时的指向

function Person(name){
this.name=name; } Person.prototype={
getName:function(){
return this.name; } } var me=new Person('asan'); alert(me.constructor===Person);//false alert(Person.prototype.constructor===Person)//false

为什么呢,原因是重定义Person.prototype时,等价于如下代码

Person.prototype=new Object({
getName:function(){
return this.name; } });

而constructor属性始终指向创建自身的构造函数,所以此时的Person.prototype.constructor属性指向Object

Person.prototype.constructor===Object;//true

怎么修正这个问题呢,很简单,重新把Person.prototype.constructor指向构造函数本身即可。

function Person(name){
this.name=name; } Person.prototype={
getName:function(){
return this.name; } } Person.prototype.constructor=Person; var me=new Person('asan'); alert(me.constructor===Person);//true alert(Person.prototype.constructor===Person)//true

转载于:https://www.cnblogs.com/cwWeb/archive/2012/03/02/2377254.html

你可能感兴趣的文章
RobotFramework自动化2-自定义关键字
查看>>
centos6.4-x86-64系统更新系统自带Apache Http Server
查看>>
[置顶] 【cocos2d-x入门实战】微信飞机大战之三:飞机要起飞了
查看>>
BABOK - 需求分析(Requirements Analysis)概述
查看>>
第43条:掌握GCD及操作队列的使用时机
查看>>
Windows autoKeras的下载与安装连接
查看>>
CMU Bomblab 答案
查看>>
微信支付之异步通知签名错误
查看>>
2016 - 1 -17 GCD学习总结
查看>>
linux安装php-redis扩展(转)
查看>>
Vue集成微信开发趟坑:公众号以及JSSDK相关
查看>>
vue项目开发之v-for列表渲染的坑
查看>>
C# 输出流转化成输入流操作XML
查看>>
CSS外边距合并(塌陷/margin越界)
查看>>
Swift给每个开发者赢取500万的机会!不看一生后悔。
查看>>
UIView详解
查看>>
MSSQL如何将查询结果拼接成字符串
查看>>
20169217 《Linux内核原理与分析》 第十周作业
查看>>
20169217 2016-2017-2 《网络攻防实践》第四周学习总结
查看>>
MemCache在Windows下环境的搭建及启动
查看>>