关于javascript原型的修改与重写(覆盖)差别详解


Posted in Javascript onAugust 31, 2016

每个JavaScript函数都有prototype属性(javascript对象没有这个属性),这个属性引用了一个对象,这个对象就是原型对象。javascript允许我们修改这个原型对象。

修改有2种方式:

方式1:在原有的原型对象上增加属性或者方法

function Person()
{
}

Person.prototype.add = function(){
	alert(this.name);
};

Person.prototype.name = "aty";

var p1 = new Person();
p1.add();//aty

方式2:重写(覆盖)原型对象

function Person()
{
}

Person.prototype = {
	add : function(){
		alert(this.name);
	},
	name : "aty"
}



var p2 = new Person();
p2.add();//aty

可以看到上面这2种方式都可以修改原型,那他们的差别究竟是什么呢?到底哪种方式才是推荐的的做法呢?

function Person()
{
}

function Animal()
{

}

var person = new Person();
var animal = new Animal();

// 修改原型
Person.prototype.say = function(){
	alert("person");
}

// 修改原型
Animal.prototype = {
	say : function(){
		alert("person");
	}
}

person.say();//person
animal.say();//Uncaught TypeError: undefined is not a function

如果是先创建对象,然后再修改原型,那么如果采用方式1,已经创建的对象能够正确访问修改后的原型;如果采用方式2,已经创建的对象无法访问到修改后的原型。从这个角度来看,显然方式1比方式2更好。为什么会这样呢?

 

function Person()
{
}

function Animal()
{

}

var person = new Person();
var animal = new Animal();
alert(person.__proto__ === Person.prototype);//true
alert(animal.__proto__ === Animal.prototype);//true

// 修改原型
Person.prototype.say = function(){
	alert("person");
}

// 修改原型
Animal.prototype = {
	say : function(){
		alert("person");
	}
}

alert(person.__proto__ === Person.prototype);//true
alert(animal.__proto__ === Animal.prototype);//false

 很显然这与java中"修改引用"和"修改引用指向的对象"很相似,效果也是一样的。

以上这篇关于javascript原型的修改与重写(覆盖)差别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS查看对象功能代码
Apr 25 Javascript
基于jquery的blockui插件显示弹出层
Apr 14 Javascript
jquery ready(fn)事件使用介绍
Aug 21 Javascript
js为数字添加逗号并格式化数字的代码
Aug 23 Javascript
js中的事件捕捉模型与冒泡模型实例分析
Jan 10 Javascript
js实现百度联盟中一款不错的图片切换效果完整实例
Mar 04 Javascript
JavaScript实现多个重叠层点击切换效果的方法
Apr 24 Javascript
Node.js实现兼容IE789的文件上传进度条
Sep 02 Javascript
js实现3D图片展示效果
Mar 09 Javascript
Vue.js实现文章评论和回复评论功能
May 30 Javascript
js实现图片懒加载效果
Jul 17 Javascript
jQuery实现的移动端图片缩放功能组件示例
May 01 jQuery
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
Aug 31 #Javascript
浅谈JavaScript 覆盖原型以及更改原型
Aug 31 #Javascript
javascript 将共享属性迁移到原型中去的实现方法
Aug 31 #Javascript
使用vue编写一个点击数字计时小游戏
Aug 31 #Javascript
原生js实现tab选项卡切换
Mar 23 #Javascript
jquery的checkbox,radio,select等方法小结
Aug 30 #Javascript
Javascript日期格式化format函数的使用方法
Aug 30 #Javascript
You might like
《雄兵连》系列首部大电影《烈阳天道》:可能是因为期望值太高了
2020/08/18 国漫
一个完整的php文件上传类实例讲解
2015/10/27 PHP
PHP设计模式之模板方法模式定义与用法详解
2018/04/02 PHP
js word表格动态添加代码
2010/06/07 Javascript
JQUBAR1.1 jQuery 柱状图插件发布
2010/11/28 Javascript
Jquery弹出窗口插件 LeanModal的使用方法
2012/03/10 Javascript
Three.js源码阅读笔记(Object3D类)
2012/12/27 Javascript
JS将表单导出成EXCEL的实例代码
2013/11/11 Javascript
javascript中不等于的代码是什么怎么写
2013/12/29 Javascript
点击标签切换和自动切换DIV选项卡
2014/08/10 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
JS实现关闭当前页而不弹出提示框的方法
2016/06/22 Javascript
JS声明式函数与赋值式函数实例分析
2016/12/13 Javascript
js Canvas实现的日历时钟案例分享
2016/12/25 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
修改layui的后台模板的左侧导航栏可以伸缩的方法
2019/09/10 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
javascript实现点击星星小游戏
2019/12/24 Javascript
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
深入理解Python3中的http.client模块
2017/03/29 Python
Python 关于反射和类的特殊成员方法
2017/09/14 Python
Python 自动登录淘宝并保存登录信息的方法
2019/09/04 Python
Django实现基于类的分页功能
2019/10/31 Python
python爬虫用mongodb的理由
2020/07/28 Python
全球游戏Keys和卡片市场:GamesDeal
2018/03/28 全球购物
优秀毕业生自荐信范文
2014/01/01 职场文书
学校就业推荐信范文
2014/05/19 职场文书
电子信息工程专业自荐书
2014/06/24 职场文书
园艺专业毕业生求职信
2014/09/02 职场文书
领导干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年团队工作总结
2014/11/24 职场文书
放假通知范文
2015/04/14 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
vue使用element-ui按需引入
2022/05/20 Vue.js