javaScript——原型

每次面试,必问原型。

那么原型到底是个啥?

简单明了的说,只要是个函数(称为fn),都会有一个叫做prototype的原型属性,他的值就叫做原型对象(即fn.prototype)。

//(原型属性)
prototype:{   }//(fn.prototype原型对象);

原型对象里又包含一个属性constructor,他的值是唯一的,且指向这个函数。

//(原型属性)
prototype:{ //(fn.prototype原型对象);
   //constructor的唯一值为fn
  constructor:fn
}

现在我们可以简单的写一个构造函数,然后把原型对象打印出来看看长啥样

function Fn(){}
//打印一下原型对象
console.log(Fn.prototype);

 

给原型对象加点东西试试

function Fn(){
 }
 Fn.prototype.name = '张三';
 Fn.prototype.age = '19';
 Fn.prototype.eat = function(){
     return '米饭'
 }
 console.log(Fn.prototype);

从打印结果来看呢,基本跟上述的描述是相符的,但多出来的_proto_是什么鬼,我们继续往下看。

 现在我们new一个Fn的实例对象,打印看一下,是个啥

//Fn的实例对象f1
var f1 = new Fn();
console.log(f1);

也有一个_proto_属性。而且发现,f1._proto_ === Fn.prototype

现在我们做一个有意思的事情,定义一个对象,定义一个数组,打印一下

//var obj = new Object(); 
var obj = {};
console.log(obj);
console.log(Object.prototype);
//var arr = new Array();
var arr = [];
console.log(arr);
console.log(Array.prototype);

发现数组、对象都有一个_proto_属性。而且obj._proto_ === Object.prototype、arr._proto_=== Array.prototype。(数组的也是一样的,这里就不占空间了)

由此,我们基本可以得出,每个对象都有一个_proto_属性,且指向创造该对象的函数的prototype。

那基本就可以得到原型链及继承

f1._proto_ === Fn.prototype  ——》》 Fn.prototype._proto_ === Object.prototype  ——》》 Object.prototype._proto_(打印发现返回nudefined)

 如果看到这里还是不懂,我推荐看深入理解javascript原型系列以及阮一峰的javascript面向对象编程

 

转载于:https://www.cnblogs.com/hess/p/10973308.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值