欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-22 10:00:16
原型对象prototypeJS中,每一个构造函数都有一个prototype属性,指向另一个对象;prototype就是一个对象,这个对象的所有属性和方法,都会被构造函数所拥有;我们可以把那些不变的方法,直接定义在prototype对象上,这样所有对象的实例就可以共享这些方法;原型的主要作用:共享方法,节约内存空间(所有实例都可以使用这个方法,不必开辟新的内存空间);一般情况下,我们的公共属性定义到构造函数里面,公共的方法我们放到原型对象身上。function Star(uname,age)...
原型对象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