Javascript构造函数、原型、对象
来源:互联网 发布:a5源码之家 编辑:程序博客网 时间:2024/05/17 20:28
构造函数与原型
构造函数是生成对象的模板,一个构造函数可以生成多个对象,每个对象都有相同的结构。使用new调用构造函数会自动创建一共新对象,调用构造函数的一共重要特征是,构造函数的prototype属性会被用作新对象的原型。
构造函数的缺点就是,每当你实例化两个对象时,需要调用两次构造函数的某一个方法,这带来的坏处就是占用内存。
为了解决构造函数的属性和方法无法被对象实例所共享的问题,我们可以把需要共享的属性和方法放在原型(prototype)对象上。原型对象上的所有属性和方法,都会被对象实例所共享。
function Animal(){}var anim = new Animal();
每个javascript函数都自动拥有一共prototype属性,该属性是一个对象
\\trueAnimal.prototype.__proto__ == Object.prototype
prototype对象包含一个constructor的属性,该属性指向函数自身
\\trueAnimal.prototype.constructor == Animal
当使用new调用构造函数时,会创建一个新对象,新对象的有一个__proto__属性,该属性指向构造函数的prototype。
下面图中概括了js对象、原型、构造函数之间的关系。
原型继承
js是一门基于原型的语言,在其他面向对象语言中,例如Java,一个类继承于另一个类,而js则是从另一个对象继承。
function Animal(name){ this.name = name;}Animal.prototype.say=function(){ console.log('I am ' + this.name);}function Cat(){}Cat.prototype = new Animal();var cat = new Cat();cat.say();
将Cat的prototype属性设为一个Animal对象,此时Cat可以继承Animal的属性。
当读取对象的某个属性时,JavaScript引擎先寻找对象本身的属性,如果找不到,就到它的原型去找,如果还是找不到,就到原型的原型去找。如果直到最顶层的Object.prototype还是找不到,则返回undefined。
但上面的继承方法也有缺陷,Cat构造函数传递参数,此时可以使用apply或call的方法。
function Cat(name, age){ Animal.call(this,name); this.age = age;}Cat.prototype = new Animal();Cat.prototype.constructor=Cat;Cat.prototype.say = function(){ Animal.prototype.say.call(this,null); console.log('I am ' + this.age + ' years old');}var cat = new Cat('Tom',15);cat.say();//I am Tom//I am 15years old
instanceof
instanceof 云悬浮用于检测对象是否属于某个类
//truecat instanceof Animal
实际上instanceof运算符并不会检测cat是否由Animal()构造函数初始化而来,而会检测cat是否继承自Animal.prototype。
实际上,instanceof判断的是一个对象原型链上的__proto__与另一个构造函数的prototype是否相等
cat.__proto__ == Cat.prototype //truecat instanceof Cat //truecat.__proto__.__proto__ == Animal.prototype //truecat instanceof Animal //truecat.__proto__={} //改变cat对象的__proto__属性cat instanceof Cat //输出false
- Javascript构造函数、原型、对象
- JavaScript构造函数及原型对象
- JavaScript中的构造函数和原型对象
- JavaScript构造函数及原型对象
- JavaScript构造函数,原型对象理解
- javascript中构造函数、对象、原型关系
- javaScript构造函数和原型对象
- 对象、构造函数、原型
- javascript原型对象、构造函数和实例对象
- Javascript函数、构造函数、原型、类和对象
- javascript面向对象技术基础(四)(类、构造函数、原型)
- JavaScript面向对象与原型(一):构造函数
- 深入理解javascript构造函数和原型对象
- 深入理解javascript构造函数和原型对象
- 深入理解javascript构造函数和原型对象
- javaScript中的prototype来龙去脉,原型、构造函数、实例对象
- JavaScript的原型对象,以及它的构造函数
- JavaScript中原型、构造函数与对象的关系
- Cpufreq
- 开始写博客,记录自己学习脚本POS的历程以及总结
- 119. Pascal's Triangle II
- Android防止重复点击事件
- JAVASE之集合(二)【Collection】
- Javascript构造函数、原型、对象
- 把spring-boot项目配置为Linux systemd服务,并注册自启动
- UIColor识别16进制的方法
- SurfaceView的使用以及空指针异常的处理
- ubuntu下解决安装leargist后出现FFTW问题
- i2c_add_driver:i2c驱动注册流程分析
- pdf编辑器怎么用能够编辑pdf文件
- Java NIO系列教程(十一) Pipe
- web 调试 log 输出