JS中的原型与函数
- 原型的概念类似于Java中的“父类”
- JS中每个对象都有__proto__属性,指向该对象的原型
- o1.proto.proto(省略n个.proto),称作原型链
- 检索对象属性时,如果找不到会检索该对象的原型链
- 每个函数都有prototype属性,存放函数constructor等信息
function AnyFunction() {} // 通常情况下,函数prototype的constructor指向函数本身 console.log(AnyFunction.prototype.constructor === AnyFunction);
- 由2知,如果要使得某个对象o1由函数func1“构造”(即func1是该o1的原型),只要执行o1.proto= func1.prototype,举个例子
// “构造”函数 function AnyFunction() { this.do = function (params) { console.log('do'); } } var o1 = {}; // 使用o1的作用域执行“构造”函数 AnyFunction.apply(o1); // 修改原型关系 o1.__proto__ = AnyFunction.prototype; // 也可以直接使用new来“构造” // var o1 = new AnyFunction(); // 调用“类型”AnyFunction的do方法 o1.do(); // 检查o1是否是AnyFunction的“实例” console.log(o1 instanceof AnyFunction);
- 由4知,如果要使得某个对象o1“继承”自对象o2(即o2是o1的原型),只要执行o1.proto = o2,举个例子:
var o1 = {a:1}; var o2 = {}; o2.__proto__ = o1; console.log(o2.a)