16

JavaScript原型及原型链

区别一下,普通对象和函数对象。函数对象才有prototype属性。

函数对象:

function f1(){};
var f2 = function(){};
var f3 = new Function('str','console.log(str)');

普通对象:

var o3 = new f1();
var o1 = {};
var o2 =new Object();

简单的说,凡是通过 new Function() 创建的对象都是函数对象,其他的都是普通对象。
原型的作用就是继承。

原型链:
JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做__proto__的内置属性,用于指向创建它的函数对象的原型对象prototype。
原型对象prototype中都有个预定义的constructor属性,用来引用它的函数对象。

person.prototype. constructor === person  //true
Function.prototype.constructor === Function //true
Object.prototype.constructor === Object //true

总结一下:

var animal = function(){};
var dog = function(){};
animal.price = 2000;//
dog.prototype = animal;
var tidy = new dog();
console.log(dog. price)  //undefined
console.log(tidy.price)  // 2000

事实证明,真正起作用的不是prototype ,而是__proto__。


dada86
993 声望22 粉丝

多努力一点点。