不用new的方式手动构造JS对象
来源:互联网 发布:淘宝新店铺怎么上货 编辑:程序博客网 时间:2024/06/04 23:28
首先我们先写一个工厂函数
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的关系
0 0
- 不用new的方式手动构造JS对象
- JS构造对象的常用方式
- js中构造函数创建对象加不加new的问题
- js中构造函数创建对象加不加new的问题
- JavaScript:让构造器函数 不管用不用new 都可以生成 正确的对象。
- Js构造对象-添加方法的三种方式
- QT C++对象不用手动delete的条件
- JS中用new 创建对象及在构造函数中return的使用
- js的new Date()构造函数
- jquery对象不用new原因
- spring之所以不用new对象!
- js面向对象编程(1)--构造函数与new命令
- js中创建对象是,工厂方式与构造函数方式中this的区别
- js中创建对象时,工厂方式与构造函数方式中this的区别
- C++用new创建对象和不用new创建对象的区别解析
- C++用new创建对象和不用new创建对象的区别解析
- C++用new创建对象和不用new创建对象的区别解析
- C++用new创建对象和不用new创建对象的区别解析
- usaco skidesign
- (疯狂的Android讲义 学习笔记)android数据存储
- usaco sort3
- 2015年总结和2016年计划
- 学习链接
- 不用new的方式手动构造JS对象
- Shell 数组简介
- 设计模式之单例模式
- Oracle数据库索引
- C语言 switch语句的的用法
- usaco sprime
- hrbust 哈理工OJ 1498Elevator Trouble【BFS过】
- ContentValues的用法
- Java笔记---迭代器