JavaScript 原型

175 阅读1分钟

原型编程的基本规则

  • 所有的数据都是对象
  • 要得到一个对象,不是通过实例化类,而是找到一个对象作为原型并克隆它
  • 对象会记住它的原型
  • 如果对象无法响应某个请求,它会把这个请求委托给它自己的原型。

原型编程模拟new 运算过程

// 定义一个构造函数
function Person( name ) {
    this.name = name;
}
// 在构造函数的原型里放置一个 getName 方法
Person.prototype.getName = function() {
    return this.name;
}
// 模拟 new 方法
let objectFactory = function() {
    let obj = new Object(), //从 Object.prototype上 clone一个空对象
    Constructor = [].shift.call(arguments); // 取得外部传入的构造器,此例是 Person
    obj.__proto__ = Constructor.prototype;// 指向正确的原型
    let ret = Constructor.apply( obj, arguments);// 借用外部传入的构造器给 obj 设置属性。
    
    return typeof ret === 'object' ? ret : obj; // 确保构造器总是返回一个对象
}
let a = objectFactory( Person, 'seven');
console.log(a.name); // 输出:sven
console.log(a.getName(); // 输出:sven
console.log(Object,getPrototypeOf(a) === Person.prototype);