不用new的方式手动构造JS对象
2016-02-16 16:13
696 查看
首先我们先写一个工厂函数
一般来说,我们生成Person对象就用
其实在理解了this上下文,原型链后,我们也可以手工构造一个Person对象,方法如下
运行结果如下:
下面一一介绍每条语句的作用
先生成一个空对象,使用
修改原型链
var obj = Person.call(tmp, name);
改变this上下文,执行对象的构造函数,如果是多个参数,可以用
如果工厂函数return的是Object类型,则会替换掉当前构造的对象
这里测试一下
这里有更详尽的解释
Js New一个函数和直接调用的区别
function Person(name) { this.name = name } Person.prototype.sex = 'male'; Person.prototype.age = 22;
一般来说,我们生成Person对象就用
var p1 = new Person('my name')的方式。
其实在理解了this上下文,原型链后,我们也可以手工构造一个Person对象,方法如下
function createPerson(name) { var tmp = {}; tmp.__proto__ = Person.prototype; var obj = Person.call(tmp, name); if (typeof obj == 'object') { return obj; } return tmp; }
运行结果如下:
下面一一介绍每条语句的作用
var tmp = {};
先生成一个空对象,使用
Object.create()方法也可以
tmp.__proto__ = Person.prototype;
修改原型链
var obj = Person.call(tmp, name);
改变this上下文,执行对象的构造函数,如果是多个参数,可以用
Person.apply(tmp,arguments)的方式,方便传入不定参数
if (typeof obj == 'object')
如果工厂函数return的是Object类型,则会替换掉当前构造的对象
这里测试一下
function Person(name) { this.name = name return new Animal(); } Person.prototype.sex = 'male'; Person.prototype.age = 22; var p1 = new Person('cch'); function Animal() { this.wow = true; this.claw = true; } Animal.prototype.further = 'soft'; console.log(p1);
new Person()最后返回的是
Animal
这里有更详尽的解释
Js New一个函数和直接调用的区别
参考文献
理解js中的原型链,prototype与proto的关系相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式