Js 函数与对象的区别及原生链的理解

来源:互联网 发布:淘宝众筹 淘宝怎么不管 编辑:程序博客网 时间:2024/05/01 15:38

一. Js 函数和对象的区别

function Test (word) {
console.log (word);
}

Var test1=Test(‘函数’);

Var test2=new Test(‘对象’);

alert(typeof(test1)));// undefined
alert(typeof(new test2 ()));//object

其实函数本身是一个对象,但它同时也是对象构造器,也就是说,可以new一个函数来返回一个对象。

二. 原型链

var base = {
name : “base”,
getInfo : function(){
return this.id+”======”+this.name;
}
};

var ext1 = {
id : 0,
_ _ proto_ _ : base
};

var ext2 = {
id : 9,
_ _ proto _ _ : base
};

console.log(ext1.id);//0
console.log(ext1.getInfo());//0=====base
console.log(ext2.id);//9
console.log(ext2.getInfo());//9=====base

这里写图片描述

这图片是什么意思呢?
当ext1和ext2调用getInfo时,先到实例当中去找这个函数,结果没找到。接着就到原型找,结果找到了,就执行这个函数。但是执行这个函数时:this代表什么呢?this的指向是谁?
在默认情况下,所有原型对象都会自动获得一个 constructor(构造函数)属性,这个属性包含一个指向 prototype 属性所在函数的指针。
那么显而易见,这个this就是指向他们各自对应的实例。
那你又想问,那this.name怎么解释呢?
你想呀,你的this是指向实例的,this先在实例当中找,没找到name,那么就到原型链中寻找。

当然,上面的图没话完整,想补全可以自己上百度搜搜 js原型链就行了。

1 0
原创粉丝点击