Javascript中构造函数、原型对象、实例化对象的关系

3 篇文章 0 订阅
1 篇文章 0 订阅

构造函数、原型对象、实例化对象的关系

构造函数(定义时尽量首字母大写)

1、构造函数与其他函数唯一的区别,就是调用他们的方式不同,任何函数只要通过new操作符来调用,那它就可以作为构造函数;而任何函数,如果不通过new操作符 来调用,那它跟普通函数也不会有什么两样。

function Person(name,age,job){
	this.name = name;
	this.age = age;
	this.job = job;
	this.sayName=function(){
	alert(this.name)
	}
}
//将构造函数当函数使用
var person = new Person("Nicholas",29,"Software Enginner");
person.sayName();//"Nicholas"

//作为普通函数调用
Person("HuHu",18,"Name")
window.sayName()//""HuHu""
//在另一个对象的作用域中调用
var o = new Object();
Person.call(o,"RuiRui",25,"Name");
o.sayName();//"RuiRui"

实例化对象

//简单的说,构造函数的过程就是实例化
var person = new Person();
/*js是基于原型的面向对象语言,所有数据都可以当作一个对象处理,
当然person就是对象,当构造函数过程后,person也是Person的一个实例
 Person()就是构造函数
*/

原型对象

原型对象上默认有一个属性constructor,该属性也是一个指针,指向其相关联的构造函数 (Person)

//函数Person(对象)有个属性prototype(指针)指向原型对象。 Person.prototype(原型对象,实质也是对象),他有个属性constructor(指针) ,又指向 Person函数对象。
function Person(name,age){
			this.name = name;
			this.age  =  age;
		}
		person.prototype.say=function(){
			console.log("我叫"+this.name+"今年"+this.age+"岁")
		}
		var p1 = new Person("小红","14")
/*

*/
	console.log(p1.say())
//p1就是person的实例,p1可以使用person.prototype的属性和方法,比如say()方法
/*首先需要明白一个知识点,是在构造函数的原型对象中的。(实例对象原型__proto__指向构造函数的原型,即prototype)p1.__proto__===person.prototype
person.prototype.__proto__===object.prototype
其他方法都是从Object继承过来的
object.prototype.__proto__===null
p1拥有person的所有方法和属性,也有object的方法和属性
*/

总结

三者的关系就是,构造函数都有一个原型对象,原型对象上包含着一个指向构造函数的指针,每个实例对象都由一个指向原型对象的内部指针,所以说实例通过内部指针访问到原型对象,通过原型对象中的constructor找到构造函数

顺便写下原型链
原型连:
获取对象的属性或方法时候,先差找对象自身属性和方法。入股找不到则查找隐式原型__proto__上的属性或方法
如果再查不到就去向上查找__proto__的__proto__直到__proto__为null为止,如果还查找不到就返回undefind

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值