javascript中Object.create与new的不同
来源:互联网 发布:赛事专用软件源码php 编辑:程序博客网 时间:2024/05/18 02:10
new
new
配合构造函数使用,创建一个新对象。
//定义classvar Person = function (firstName) { this.firstName = firstName;};//定义methodPerson.prototype.sayHello = function() { console.log("Hello, I'm " + this.firstName);};//实例对象var person1 = new Person("Alice");//对象调用methodperson1.sayHello(); // logs "Hello, I'm Alice"
这里有个疑问,为啥sayHello
方法定义在Person.prototype
上,而prototype又是什么东西?
prototype是javascript OOP的magic。javascript的面向对象,继承等实现都是围绕着prototype属性转的。
在javascript中,只有function
(javascript中function也是对象)才有prototype属性。定义一个函数,它的prototype默认是一个空对象,即{}
。
var test = function () {return 'haha';};console.log(test.prototype); // {}
函数有了prototype属性,由函数创建的对象才有原型的概念。person1由Person函数构建出来的,所以person1的原型就是Person.prototype。javascript使用__proto__
指向对象的原型。
console.log(Person.prototype) // { sayHello: [Function] }console.log(person1.__proto__) // { sayHello: [Function] }
由此可以总结new
做了:
1. 创建实例对象person1
2. 调用构造函数(Person)初始化person1成员变量(firstname)。
3. 指定实例对象的原型为Person.prototype对象。即person1.__proto__
指向Person.prototype。
Object.create()
Object.create(o)的作用是创建一个空对象,空对象的原型是参数o:
var o = Object.create(null);console.log(o); // {}o.name = 'jian';var o2 = Object.create(o);console.log(o2); // {}console.log(o2.name); // 'jian',
o2为空对象,但o2.name
输出了‘jian,在对象o2上没有找到
name属性,怎在原型o上找到了。
new`做了:
由此可以总结
1. 创建空对象{}
2. 指定空对象{}的原型为Object.create()的参数。
0 0
- javascript中Object.create与new的不同
- Object.create 与 new function 区别
- 你不知道的javascript之Object.create 和new区别
- 你不知道的javascript之 Object.create 和 new 区别
- JavaScript中的new操作符和Object.create()
- js中的new操作符与Object.create()的作用与区别
- Object.create(null)和new Object的区别
- JS原型链 new 与 Object.Create()区别 代码及继承的方法
- 实现JavaScript的Object.create方法
- javascript中object与{}的区别
- javascript Object.create()函数
- new与malloc的不同
- new与malloc的不同
- Ext中new 和create的区别
- Ext中new 和create的区别
- javascript new Object(value)
- JavaScript中new与this
- Java中OutOfMemoryError与unable to create new native thread(JVM创建大量线程)的关系
- Light OJ 1031 Easy Game 区间DP
- Summer Training Team Selection (1) Problem F Line Them Up 判断升序降序
- 学习PS基础
- Volley源码解析(一),基本概述
- 算法导论学习笔记(二)分治策略之最大子数组
- javascript中Object.create与new的不同
- OpenCV学习之安装
- 343. Integer Break
- 2.一个奇怪的fork程序
- iOS中实现获取文本内容的宽高
- 实习面试经验
- 3.fork()到底干了啥?
- JAVA为什么要配置环境变量,怎样配置
- Redis和Memcache对比及选择