【JavaScript】模拟 new 命令

it2025-08-05  6

JavaScript教程 / 面向对象编程 / 实例对象与 new 命令 / new 命令的原理

1. 示范

// new 命令简化的内部流程,可以用下面的代码表示 function _new(/* 构造函数 */ constructor, /* 构造函数参数 */ params) { // 将 arguments 对象转为数组 var args = [].slice.call(arguments); // 取出构造函数 var constructor = args.shift(); // 创建一个空对象,继承构造函数的 prototype 属性 var context = Object.create(constructor.prototype); // 执行构造函数 var result = constructor.apply(context, args); // 如果返回结果是对象,直接返回,否则返回 context 对象 return (typeof result === 'object' && result != null) ? result : context; } /* - - - 实例 - - - */ function Person(name, age) { this._name = name; this._age = age; } var person = _new(Person, '张三', 24); person; // {name:'张三',age:24}

2. 自行实现(另一种思路)

// 自行实现 function _new(/* 构造函数 */ cons_, /* 构造函数参数 */params) { var args = []; for (var i = 1; i < arguments.length; i++) { // 排除第一项,其余存入数组 args.push(arguments[i]); } // 创建一个空对象,并将该空对象原型设为构造函数的 prototype 属性 var obj = Object.setPrototypeOf({}, cons_.prototype); // 绑定this cons_.apply(obj, args); // 返回该对象 return obj; } /* - - - 实例 - - - */ function Person(name, age) { this._name = name; this._age = age; } var person = _new(Person, '张三', 24); person; // {name:'张三',age:24}
最新回复(0)