我们先来一个简单的构造函数+原型对象的小程序
function CreateObj( uName, uAge ) {
this.userName = uName;
this.userAge = uAge;
}
CreateObj.prototype.showUserName = function () {
return this.userName;
}
CreateObj.prototype.showUserAge = function () {
return this.userAge;
}
这个程序,没有什么问题,但是非常的冗余,每次扩展一个方法,都要写一次原型对象,我们可以把原型对象prototype当做一个字面量对象,所有的方法都在字面量对象中扩展,可以达到同样的效果:
CreateObj.prototype = {
showUserAge : function(){
return this.userAge;
},
showUserName : function(){
return this.userName;
},
}
var obj1 = new CreateObj( 'ghostwu', 22 );
var obj2 = new CreateObj( '卫庄', 24 );
console.log( obj1.showUserName(), obj1.showUserAge() ); //ghostwu 22
console.log( obj2.showUserName(), obj2.showUserAge() ); //卫庄 24
但是这种原型(prototype)对象的写法,属于重写了CreateObj的默认原型对象,造成的第一个问题就是constructor不再指向CreateObj.
没有重写之前,constructor指向CreateObj
function CreateObj( uName, uAge ) {
this.userName = uName;
this.userAge = uAge;
}
CreateObj.prototype.showUserName = function () {
return this.userName;
}
CreateObj.prototype.showUserAge = function () {
return this.userAge;
}
console.log( CreateObj.prototype.constructor === CreateObj ); //true
重写之后,constructor指向Object
CreateObj.prototype = {
showUserAge : function(){
return this.userAge;
},
showUserName : function(){
return this.userName;
},
}
console.log( CreateObj.prototype.constructor === CreateObj ); //false
console.log( CreateObj.prototype.constructor === Object ); //true
所以说,constructor不能准确的标识对象,因为他会被修改
我们之前写的程序,基本都是在原型对象(prototype)上扩展完了方法之后,再实例化对象,我们看下,先实例化对象,再在原型对象(prototype)上扩展函数,
实例对象是否能正常的调用到扩展的方法?
function CreateObj( uName, uAge ) {
this.userName = uName;
this.userAge = uAge;
}
var obj1 = new CreateObj( 'ghostwu', 22 );
CreateObj.prototype.showUserName = function(){
return this.userName;
}
console.log( obj1.showUserName() ); //ghostwu
可以正常调用,但是,如果原型对象是重写的,就调用不到了
function CreateObj( uName, uAge ) {
this.userName = uName;
this.userAge = uAge;
}
var obj1 = new CreateObj( 'ghostwu', 22 );
CreateObj.prototype = {
showUserName : function(){
return this.userName;
}
}
console.log( obj1.showUserName() ); //报错
因为重写了原型对象之后,同时实例化又是在重写之前发生的,所以实例的隐式原型__proto__不会指向重写的原型对象,所以就调用不到另一个问题,如果在原型对象(prototype)上有引用类型,千万小心,因为多个实例共用原型对象,只要有一个实例改变了引用类型的值,其他实例全部会收到改变之后的结果。
function CreateObj(){}
CreateObj.prototype = {
name : 'ghostwu',
skills : [ 'php', 'javascript', 'linux' ]
};
var obj1 = new CreateObj();
obj1.skills.push( 'python' );
var obj2 = new CreateObj();
console.log( obj2.skills ); //'php', 'javascript', 'linux', 'python'
原型对象(prototype)的共享特性,可以很方便的为一些内置的对象扩展一些方法,比如,数组去重复
Array.prototype.unique = function(){
var res = [];
for( var i = 0, len = this.length; i < len; i++ ){
if( res.indexOf( this[i] ) == -1 ) {
res.push( this[i] );
}
}
return res;
}
var arr = [ 10, 20, 30, 20, 30, 20, 40, 20 ];
console.log( arr.unique() ); //10, 20, 30, 40
但是,不要随便往内置的对象上面扩展方法,在多人协作开发,很容易产生覆盖,以及污染。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# js
# 原型对象
# prototype
# JS原型prototype和__proto__用法实例分析
# js构造函数constructor和原型prototype原理与用法实例分析
# javascript 对象 与 prototype 原型用法实例分析
# JavaScript使用prototype原型实现的封装继承多态示例
# [js高手之路]图解javascript的原型(prototype)对象
# 原型链实例
# JavaScript原型Prototype详情
# 重写
# 是在
# 都在
# 第一个
# 又是
# 多个
# 上有
# 很容易
# 我们可以
# 他会
# 写了
# 报错
# 可以达到
# 什么问题
# 很方便
# 先来
# 是否能
# 大家多多
# 要写
# 象中
相关文章:
如何正确选择百度移动适配建站域名?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
网站设计制作公司地址,网站建设比较好的公司都有哪些?
如何在Windows 2008云服务器安全搭建网站?
如何快速搭建虚拟主机网站?新手必看指南
如何在IIS管理器中快速创建并配置网站?
建站之星收费标准详解:套餐费用及年费价格表一览
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
免费ppt制作网站,有没有值得推荐的免费PPT网站?
建站10G流量真的够用吗?如何应对访问高峰?
网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?
Python文件管理规范_工程实践说明【指导】
如何在香港服务器上快速搭建免备案网站?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
购物网站制作费用多少,开办网上购物网站,需要办理哪些手续?
制作销售网站教学视频,销售网站有哪些?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
如何选择靠谱的建站公司加盟品牌?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
制作网站的公司有哪些,做一个公司网站要多少钱?
如何通过山东自助建站平台快速注册域名?
建站主机系统SEO优化与智能配置核心关键词操作指南
,在苏州找工作,上哪个网站比较好?
如何批量查询域名的建站时间记录?
如何快速搭建个人网站并优化SEO?
建站之星安装模板失败:服务器环境不兼容?
焦点电影公司作品,电影焦点结局是什么?
如何快速查询网站的真实建站时间?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
网站制作需要会哪些技术,建立一个网站要花费多少?
西安大型网站制作公司,西安招聘网站最好的是哪个?
定制建站流程步骤详解:一站式方案设计与开发指南
如何在服务器上三步完成建站并提升流量?
教程网站设计制作软件,怎么创建自己的一个网站?
用v-html解决Vue.js渲染中html标签不被解析的问题
怀化网站制作公司,怀化新生儿上户网上办理流程?
PHP正则匹配日期和时间(时间戳转换)的实例代码
建站主机是否属于云主机类型?
招贴海报怎么做,什么是海报招贴?
微信推文制作网站有哪些,怎么做微信推文,急?
建站主机与虚拟主机有何区别?如何选择最优方案?
网站制作公司,橙子建站是合法的吗?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
建站之星图片链接生成指南:自助建站与智能设计教程
网站制作公司排行榜,抖音怎样做个人官方网站
如何通过VPS建站实现广告与增值服务盈利?
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
如何用VPS主机快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。