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

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

2016-06-06 12:44 573 查看

凡是通过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);// Object
console.log(typeof Function.prototype);// Function ,这个最特殊
console.log(typeof Object.proptype); // Object
console.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)的prototype
console.log(person.prototype.__proto__ == Object.prototype);// true
// Object.prototype 对象也有__ptoto__ 属性,但它比较特殊,为null
console.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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  prototype javascript