您的位置:首页 > Web前端 > JavaScript

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

2017-04-01 13:11 204 查看
一. 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原型链就行了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: