当前位置: 首页 > news >正文

js中Object.create作用,什么时候用?和new是什么区别

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

javascript里类就是函数,声明一个类相当于声明一个类的构造函数。

//声明一个类
function Animal(name){
	this.name=name;
}
//创建一个对象
var cat=new Animal("Tom");

new创建一个对象,执行构造函数。

Object.create相当于创建一个对象,但是不执行构造函数。

var cat1=new Animal("Tom");
var cat2=Object.create(Animal.prototype);

console.log(cat1 instanceof Animal);//true
console.log(cat2 instanceof Animal);//true

那么通常在什么时候使用呢?

通常在类继承的时候使用。

javascript中通常继承的用法如下

//声明一个类
function Animal(){
	alert("这时候创建了一个Animal对象");
}
Animal.prototype.say=function(){
	alert("啊");
};
//声明一个子类
function Cat(){
}
Cat.prototype=new Animal();//继承Animal
Cat.prototype.constructor=Cat;
Cat.prototype.say=function(){
	alert("喵");
};
var cat=new Cat();
console.log(cat instanceof Cat);//true
console.log(cat instanceof Animal);//true

上面代码是继承的方式,其中创建了一个Animal对象,这个过程会执行Animal的构造函数。但是很多时候我们不想执行这段代码就想继承,于是我们就这样子

//声明一个类
function Animal(){
	alert("这时候创建了一个Animal对象");
}
Animal.prototype.say=function(){
	alert("啊");
};
//声明一个子类
function Cat(){
}
Cat.prototype=Object.create(Animal.prototype);//继承Animal
Cat.prototype.constructor=Cat;
Cat.prototype.say=function(){
	alert("喵");
};
var cat=new Cat();
console.log(cat instanceof Cat);//true
console.log(cat instanceof Animal);//true

通过这种方式就可以很好实现了

注意,代码中的

Cat.prototype.constructor=Cat;

是必要的,如果没有的话obj.constructor就会错误

转载于:https://my.oschina.net/linsk1998/blog/1606702

相关文章:

  • 分享Silverlight/Windows8/WPF/WP7/HTML5一周学习导读(5月6日-5月12日)
  • 【289】◀▶ Python I/O 读写文本文件
  • Model to Text工具Acceleo使用教程(三)——一个简单的代码生成模块
  • UVa11426 最大公约数之和(正版)
  • mac os下通过命令行的方式编译c++代码并在xcode里引用
  • 房地产英语 Real estate词汇
  • 根据Forms名找出其所归属的权限组
  • oss web直传
  • dd-wrt达到300Mbps的关键设置
  • 跨域
  • [转载] 考试经验——2011下半年信息系统项目管理师论文52分者谈论文写作经验...
  • 『TensorFlow』TFR数据预处理探究以及框架搭建
  • shell开发基础:准备100万条测试数据在MYSQL中
  • 十个生成模型(GANs)的最佳案例和原理 | 代码+论文
  • Linux中如何让进程(或正在运行的程序)到后台运行?[zz]
  • Android优雅地处理按钮重复点击
  • Asm.js的简单介绍
  • classpath对获取配置文件的影响
  • Java IO学习笔记一
  • Javascript Math对象和Date对象常用方法详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java多态
  • js正则,这点儿就够用了
  • oschina
  • Redux 中间件分析
  • Vim Clutch | 面向脚踏板编程……
  • Vue.js源码(2):初探List Rendering
  • 初探 Vue 生命周期和钩子函数
  • 短视频宝贝=慢?阿里巴巴工程师这样秒开短视频
  • 跨域
  • 译自由幺半群
  • 由插件封装引出的一丢丢思考
  • 进程与线程(三)——进程/线程间通信
  • ​猴子吃桃问题:每天都吃了前一天剩下的一半多一个。
  • !!【OpenCV学习】计算两幅图像的重叠区域
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #100天计划# 2013年9月29日
  • #Linux(Source Insight安装及工程建立)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • #图像处理
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • (二)WCF的Binding模型
  • (附源码)计算机毕业设计ssm-Java网名推荐系统
  • (全部习题答案)研究生英语读写教程基础级教师用书PDF|| 研究生英语读写教程提高级教师用书PDF
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)编辑寄语:因为爱心,所以美丽
  • (转)用.Net的File控件上传文件的解决方案
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net core Swagger 过滤部分Api
  • .skip() 和 .only() 的使用
  • /var/log/cvslog 太大
  • @configuration注解_2w字长文给你讲透了配置类为什么要添加 @Configuration注解
  • @Controller和@RestController的区别?
  • []串口通信 零星笔记
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]