代码改变世界

理解原型

2015-12-10 14:47  孤独大兔子  阅读(259)  评论(0编辑  收藏  举报

function Box(){
this.aaa=123;
}
var box=new Box();

console.log(Box);
console.log(box);
console.log(box.aaa);
console.log(Box.prototype);
console.log(box.constructor);
console.log(box.__proto__);
console.log(box.constructor==Box);
console.log(Box.prototype==box.__proto__);
console.log(box.__proto__.constructor.__proto__.constructor);
console.log(box.__proto__.constructor);

结果:

 

来自群里的问题

function a () {
  this.c= function () {
    console.log('c');
  }
};
a.b = function () {
   console.log('b');
};
var e = new a ();
console.log(e._________)  //问题:a的实例得到b方法 不用call,apply

答案:

//首先new以后 e.__proto__=a.prototype,当想调用e的b方法时,首先e没有b方法和属性,于是他要到他的__proto__中去找,也就是a.prototype中,但又没在他的原型里写,所以就找不到
console.log(e.__proto__.constructor.b());

 

来自jquery的理解

function pub(){
    return new pub.prototype.init();
}
pub.prototype.init=function(){
    this.css();
}
pub.prototype.css=function(){
    console.log("123");
}
pub.prototype.init.prototype=pub.prototype;
pub().css();
//pub.prototype.init.prototype=pub.prototype;形成了对象互相引用,所以才能用pub().css()