Javascript的new关键字主要的作用是继承 new一共经历4个阶段 1、创建一个空对象 var obj = new Object(); 2、设置原型链
此时便建立了obj对象的原型链 obj.proto = Object.prototype; 3、让Func的this指向obj,并执行Func函数体 Object.call(obj); 4、判断Func(构造函数)的返回值类型 return typeof result === 'object'? result : obj;
构造函数默认return this,不用写,如下 function A(){ this.name = x; // return this; }
如果构造函数return是基本数据类型: return 1 return "abc"
则return 后的东西忽略,就是return {}
如果是return的是引用类型: 则以return的内容为准 function A(){ this.name = x; // 无效
return {a: 1}; }
// (1)首先创建了一个新的空对象 // (2)设置原型,将对象的原型设置为函数的 prototype 对象。 // (3)让函数的 this 指向这个对象,执行构造函数的代码(为这个新对象添加属性) // (4)判断函数的返回值类型,如果是值类型,返回创建的对象。如果是引用类型,就返回这个引用类型的对象。
// 实现:
function objectFactory() { let newObject = null, constructor = Array.prototype.shift.call(arguments), result = null;
// 参数判断 if (typeof constructor !== "function") { console.error("type error"); return; }
// 新建一个空对象,对象的原型为构造函数的 prototype 对象 newObject = Object.create(constructor.prototype);
// 将 this 指向新建对象,并执行函数 result = constructor.apply(newObject, arguments);
// 判断返回对象 let flag = result && (typeof result === "object" || typeof result === "function");
// 判断返回结果 return flag ? result : newObject; }
// 使用方法 // objectFactory(构造函数, 初始化参数)
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。