JS原型,原型链(草稿)

 自己探索一下原型链。草稿

在学习对象和函数的时候,一直傻傻分不清他们的关系。此文搞懂原型和原型链的知识点

先说一下js的类型。

基本数据类型:number,string,null,undefined,bool。

引用数据类型:Object(对象),Function,Array,Data。

这个object就很奇怪嗷。为什么能被称为引用数据类型呢?

一 对象。

创造对象的方法有两种。一个是new,一个字面量{}。两个效果相等。

var obj = new Object();

var obj2 = obj1;

obj2.name = '我有名字了';

console.log(obj1.name)//我有名字了。

(基本数据结构类型在栈中,而引用数据类型保存在堆中。但是JS语言不能直接在堆中进行操作,只能通过引用地址找到保存在堆中的对象。)

obj1,obj2这是我们通过new进行创建的对象。

这里有两个问题。

1 new创建对象过程中发生了什么?

2 创造出的对象obj1,obj2有什么属性?

我们打开控制台先回答第二点。

除了name的属性以外,还有_proto_属性,photo是照片,proto是什么意思?嗷,原来是原型的意思。

我们把name属性删掉,这个时候打开控制台再看。怎么还有proto呢?我们先保留这个问题。

函数的属性prototype里面还有proto。并且和对象的proto一摸一样。

   

二 函数

function sayName(a) {

    name = '我有名字了';
return name;
}

sayName函数里面除了name属性,还有prototype属性,还有constructor,以及__proto__。这个属性是什么东东呢?
1 console.log(sayName.constructor);

    2 console.log(sayName.__proto__);

 

3  上面的乏善可陈,我们看看prototype。我天,prototype属性里面怎么还有proto和constructor呢。
3.1 console.log(sayName.prototype)

我们先看一下constructor。里面还有prototype以及proto。

这个时候我们先看一下 :

3.11console.log(sayName.prototype.constructor)(等价于 :console.log(sayName);)

明白了 prototype属性里面有constructor,会指向回来的值。我们在后面再加.prototype.constructor,会指向回来!!!

 函数有一个属性 叫property。

property有一个constructor,指向函数。

我们再看constructor里面有什么?

3.12 console.log(sayName.prototype.constructor.protype.constructor)等价于 :console.log(sayName);

这个就到此一段停止了!!!我们看看prototype的__proto__;

3.2 console.log(sayName.prototype.__proto__);

这个里面还有constructor,是不是也是指向回去的呢?控制台看一下竟然不是!!!!

console.log(sayName.prototype.__proto__.constructor);

console.log(sayName.prototype.__proto__.prototype);    

原文地址:https://www.cnblogs.com/hacker-caomei/p/14134200.html