Function.prototype.a = 'a';
Object.prototype.b = 'b';
function Person(v) {
this.v=v;
};
var p = new Person("aa");
//以上代码是通过构造函数创建对象;
//其过程为:
//1.创建一个新的对象
//2.将构造函数的作用域赋给新的对象(因此其中的this就指向了这个函数)
//3.执行构造函数中的代码(为这个新对象添加属性)
//4.返回新对象
//因此p的类型为object,而不是function,它不会继承Function的原型属性
//因object为所有对象的基类,所以,p可以访问得到Object的原型的属性
console.log('p.a: ' + p.a); // p.a: undefined
console.log('p.b: ' + p.b); // p.b: b
1.对象有属性_proto_,指向该对象的构造函数的原型
2.方法除了有_proto_,还有prototype,prototype指向该方法的原型
3.函数实例的原型是object类型,构造函数是function类型
对于用new来创建一个新对象的过程,其内部操作为:
function new (baseObj) {
// 新建一个对象
var obj = {};
// 将构造函数的作用域赋给新对象
obj._proto_ = baseObj.prototype;
// 执行构造函数中的代码,初始化对象
baseObj.call(baseObj);
}