网络视频直播系统 vim复制 MongoDB vim wavedorm datagridview timer routes 3d jvm mac脚本编辑器 json转object matlab取实部 mysql查询 python中的index python学习网站 java基础入门 java基础教学 java调用接口 心理学与生活txt lol设置 pyh java疯狂讲义 spoonwep 键盘指法练习软件 论文修改软件 视频后期处理软件 js代码混淆工具 小度音箱app cdr字体变形 php随机数函数 脚本语言 sqlprompt qq浏览器手机版 office2010免费版 淘新闻下载 极速pdf转word 易语言tv devenv 唯品会客服在哪
当前位置: 首页 > 学习教程  > 编程语言

JS原型中的constructor属性

2020/10/8 19:17:49 文章标签:

JS原型中的constructor属性 定义 constructor 属性返回对创建此对象的数组函数的引用。 语法 object.constructor this指向 constructor,构造函数,对这个名字,我们都不陌生,constructor始终指向创建当前对象的构造函数。 这里有一点需要…

JS原型中的constructor属性

定义

constructor 属性返回对创建此对象的数组函数的引用。

语法

object.constructor

this指向

constructor,构造函数,对这个名字,我们都不陌生,constructor始终指向创建当前对象的构造函数。
这里有一点需要注意的是,每个函数都有一个prototype属性,这个prototype的constructor指向这个函数,这个时候我们修改这个函数的prototype时,就发生了意外。
例:

function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype.getAge = function(){
return this.age;
}
Person.prototype.getName = function(){
return this.name;
}
var p = new Person("小明",18);
console.log(p.constructor); //Person(name, age)
console.log(p.getAge()); //18
console.log(p.getName()); //小明

将上面的方法改写为:

function Person(name,age){
this.name = name;
this.age = age;
}
Person.prototype = {
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
}
var p = new Person("小明",18);
console.log(p.constructor); //Object()
console.log(p.getAge()); //18
console.log(p.getName()); //小明

可见constructor变了。原因就是prototype本身也是对象,上面的代码等价于:

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

因为constructor始终指向创建当前对象的构造函数,那么就不难理解上面代码p.constructor输出的是Object了。
那么对于修改了prototype之后的constructor还想让它指向Person怎么办呢?直接给Person.prototype.constructor赋值就可以了:

Person.prototype = {
constructor:Person,
getName:function(){
return this.name;
},
getAge:function(){
return this.age;
}
}

本文链接: http://www.dtmao.cc/news_show_250137.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?