
原型和原型链关系贯穿JavaScript中的对象,而JavaScript中万物皆对象,所以原型和原型链是比较重要的概念,今天就带大家一起来看一看JavaScript中的原型与原型链。
一、了解概念(知道有这两个名词即可)
-
原型(
prototype) -
原型链(
__proto__)
二、了解从属关系
prototype => 函数的一个属性 : 同时也是一个 对象{} (称之为原型对象亦可)
__proto__ => 对象Object的一个属性 : 同时也是一个 对象{} (__proto__也就是[[Prototype]])
注:对象的__proto__保存着该对象的构造函数的prototype
a.声明一个构造函数
function Test() { }
//prototype 是函数的一个属性
console.dir(Test);
console.log(Test.prototype);
// Test.prototype也是一个对象
console.log(typeof Test.prototype);
b.声明一个对象
const test = new Test();
console.log(test);
//验证test为一个对象
console.log(typeof test);
//__proto__是对象的一个属性
console.log(test.__proto__);
console.log(Test.prototype);
//对象的__proto__属性存储着Test.prototype
console.log(test.__proto__ === Test.prototype);
// test.__proto__也是一个对象
console.log(typeof test.__proto__);
function Test() {}
console.log(Test.prototype); //验证函数是否有prototype属性
let test = new Test();
console.dir(test.__proto__); //验证对象是否有__proto__属性
console.log(test.__proto__ === Test.prototype);//验证对象的__ptoto__是否保存着该对象的构造函数的prototype
console.log(Test.prototype.__proto__ === Object.prototype);//Test.prototype(是一个对象)的__proto__属性是否是对象的原型属性
console.log(Object.prototype.__proto__);//原型链的顶层没有__proto__属性 null
三、深入认识原型链、原型和原型继承
function Test(){}
let test =new Test();
test.a= 10;
//test.__proto__ === test.constructor.prototype
test.__proto__.b1=11;//对象的__proto__属性存储着对象构造函数的prototype属性
Test.prototype.b2=11;
test.__proto__.__proto__.c1=12;
Object.prototype.c2=12;
console.log(test);
console.log(Test.prototype);
console.log(Object.prototype.__proto__);
/*逐层解析
* test{
* a = 10
* __proto__:Test.prototype{
* b = 11
* __proto__:Object.prototype{
* c = 12
* X__prototype__:null
* }
* }
* }
*
* */
四、总结
-
不建议直接用
__proto__访问。 -
可以简单概括为以
prototype为原型节点,__proto__为原型链条。 -
每个实例对象(
object)都有一个私有属性(称之为__proto__)指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象为null。根据定义,null没有原型,并作为这个原型链中的最后一个环节。 -
someObject.[[Prototype]]符号是用于指向someObject的原型,someObject.[[Prototype]]===__proto__(JavaScript的非标准但许多浏览器实现的属性)。 -
Object.prototype属性表示Object的原型对象。 -
被构造函数创建的实例对象的
[[Prototype]]指向func的prototype属性。
推荐视频:《JavaScript极速入门_玉女心经系列》、《独孤九贱(6)_jQuery视频教程》
以上就是藕断丝连,JavaScript中的原型与原型链的详细内容,更多请关注其它相关文章!
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
