js中的原型与原型链的一点理解

来源:互联网 发布:java线程的同步问题 编辑:程序博客网 时间:2024/05/26 15:58

凡是通过new Function() 创建的对象都是函数对象,其他的都是普通对象

在js中,每当定义一个对象时,对象都会包含一些预定义的属性。其中,函数对象的一个属性就是原型对象prototype。注意:普通对象没有prototype,但有__proto__属性

function f1(){};console.log(f1.prototype); // f1{}/*由上文可以看出,f1.prototype就是f1的一个实例对象。就是在f1创建的时候,创建了一个它的实例对象并复制给它的prototype,基本过程如下:var tmp = new f1();f1.prototype = tmp;*/console.log(typeof f1.prototype);// Objectconsole.log(typeof Function.prototype);// Function ,这个最特殊console.log(typeof Object.proptype); // Objectconsole.log(typeof Function.prototype.prototype); // undefined

原型对象用来做什么呢?主要作用是用于继承

var Person = function (name){    this.name = name;}Person.prototype.getName = function(){    return this.name;}var zhagnshan = new Person('zhangshan');console.log(zhangshan.getName()):// zhangshan

原型链

JS 在创建对象的时候,都有一个叫做__ptoto__的内置属性,用于指向创建它的函数对象prototype。以上面的例子为例:

console.log(zhangshan.__prototype__ === Person.prototype);// true// Person.prototype 对象也有__proto__属性,它指向创建它的函数对象(Object)的prototypeconsole.log(person.prototype.__proto__ == Object.prototype);// true// Object.prototype 对象也有__ptoto__ 属性,但它比较特殊,为nullconsole.log(Object.prototype.__proto__);// null// 这个由__proto__串起来的直到Object.prototype.__proto__为null 的链叫做原型链![](~/11-05-24.jpg)// 栗子// prototype 就是函数自身的一个实例对象// __proto__ 指向创建它的(即父亲的)函数对象prototype ,即父亲函数对象的一个实例对象var animal = function (){};var dog = function(){};animal.price = 2000;// dog 的实例对象将具有animal 的一切属性// dog.__proto__ = Function.prototype;// dog.prototype = new Function();dog.prototype = animal;// dog.__proto__ = Function.prototype;// dog.prototype = animal;var tidy = new dog();// tidy.__proto__  = dog.prototype = animal;// dog.price = dog.__proto__.price = Function.prototype.price = undefined;// tidy.price = tidy.__proto__.price = dog.prototype.price = animal.price;console.log(animal);console.log(dog.prototype);console.log(dog.price,dog.__proto__.price);console.log(tidy.price,tidy.__proto__.price,dog.prototype.price,animal.price);
0 0
原创粉丝点击