浅谈对js原型的理解

2018-06-24 01:41:55来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

  一.  在JavaScript中,一切皆对象,每个对象都有一个原型对象(prototype),而指向该原型对象的内部指针则是__proto__。当我们对对象进行for in 或者for of遍历时,就会通过__proto__依次遍历对象关联的所有对象。这就是原型链,遍历所有对象的父对象直到object直至null。

function Person(name,work){
    this.name = name;
    this.work = work;    
}
Person.prototype.show = function(){
    console.log(this.name);
}
var person = new Person('nicknailo','全栈开发');
console.log(person.__proto__ === Person.prototype); //true
console.log(Person.prototype.__proto__);//Object 或者{}
console.log(person.__proto__.__proto__.__proto__);//null
console.log(Person.prototype);//Person { show: [Function] }

       person对象的原型指向 Person.prototype,Person.prototype指向object,object 指向 null。蕴含了一个哲理,无中生有。

  二.

JavaScript原型链分析图

这是一张描述了Object、Function以及一个函数实例Foo他们之间原型之间联系。如果理解了上面的概念,这张图是不难读懂。

Function.prototype.proto 指向了 Object.prototype,这说明Function.prototype 是一个 Object实例,那么应当是先有的Object再有Function。

但是Object.prototype.constructor.proto 又指向了 Function.prototype。这样看来,没有Function,Object也不能创建实例。

 

 

  三.Person.prototype只是对象的原型上(constructor)扩展的属性。

var animal = function(){};
var dog = function(){};

animal.price = 2000;
dog.prototype = animal;
var tidy = new dog();
console.log(dog.price + " : dog.price");//undefined : dog.price
console.log(tidy.price + " : tidy.price"); //2000 : tidy.price

  上述代码可以看出来,实例tidy只与原型对象dog.prototype存在关联,上面的代码可以看成是  dog.prototype.price = 2000;

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:图解原型链

下一篇:【Dojo 1.x】笔记6 配置对象dojoConfig的用处和真身所在