当前位置: 移动技术网 > IT编程>开发语言>JavaScript > javascript知识巩固------prototype属性

javascript知识巩固------prototype属性

2020年07月24日  | 移动技术网IT编程  | 我要评论
原型对象prototype
  • JS中,每一个构造函数都有一个prototype属性,指向另一个对象;
  • prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有;
  • 我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法;
  • 原型的主要作用:共享方法,节约内存空间(所有实例都可以使用这个方法,不必开辟新的内存空间);
  • 一般情况下,我们的公共属性定义到构造函数里面,公共的方法我们放到原型对象身上。
	function Star(uname,age) {
		this.uname=uname
		this.age=age
	}
	Star.prototype.sing = function() {
		console.log('我会唱歌')
	}
	let wff = new Star('王霏霏',18)
	let pxz = new Star('裴秀智',18)
	wff.sing()
	pxz.sing()
对象原型 __proto__(对象都会有一个属性__proto__)
  • 对象身上系统自己添加一个__proto__指向我们构造函数的原型对象;
	console.log(wff.__proto__ === Star.prototype)// 输出结果为true
  • 方法的查找规则:首先先看wff实例对象身上是否有sing这个方法,如果有就执行这个实例对象身上的sing;如果没得,因为有__proto__的存在,就会去构造函数原型对象prototype身上查找sing这个方法;
  • 图解:link
constructor 构造函数
  • 对象原型(__proto__)和构造函数原型对象(prototype)里面都有一个constructor属性,constructor我们称为构造函数,因为它指回构造函数本身;
  • constructor主要用于记录该对象引用于哪个构造函数,它可以让原型对象重新指向原来的构造函数;
  • 很多情况下,我们需要手动的利用constructor这个属性指回原来的构造函数;
	function Star(uname,age) {
		this.uname=uname
		this.age=age
	}
	/*
	Star.prototype.sing = function() {
		console.log('我会唱歌')
	}
	Star.prototype.movie = function() {
		console.log('我会拍电影')
	}
	*/
	Star.prototype = {
		constructor:Star,
		sing(){
			console.log('我会唱歌')
		},
		movie(){
			console.log('我会拍电影')
		}
	}
	let wff = new Star('王霏霏',18)
	let pxz = new Star('裴秀智',18)
	console.log(Star.prototype.constructor)
	console.log(wff.__proto__.constructor)

注意:如果我们修改了原来的原型对象,并且采取直接给prototype赋值为一个对象的方法(这时候会把原来的constructor属性覆盖掉),则我们必须手动利用constructor这个属性指回原来的构造函数(这样我们才能够知道我们的对象是通过哪一个构造函数创建出来的)。
注意:因此,当我们今后想要利用原型对象扩展内置对象方法的时候,对于数组和字符串内置对象,不能给原型对象覆盖操作诸如Array.prototype={};只能是Array.prototype.xxx=function(){}的方式。

本文地址:https://blog.csdn.net/wennianzhu/article/details/107528548

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网