Javascript创建对象的方法有对象字面量、new+构造函数、Object.create()等,Object.create()方法是否是最能体现Javascript基于原型的思想?new+构造函数创建对象又是怎样体现基于原型的思想的?对象字面量方法和new+构造函数两种方法谁更早出现的?
拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...
抱歉第一个问题我不太了解,等我研究研究再来补充。
第二个问题:当我们创建一个构造函数,其内部就有一个Prototype属性,该属性是一个指针,指向了该构造函数的原型对象通过new操作符+构造函数实例化出来的对象,内部有一个__proto__属性,该属性也指向了原型对象
function Foo(name){ this.name = name; } Foo.prototype.getName = function(){ return this.name; }; var obj = new Foo("suoz"); alert(obj.getName());
我觉得能体现出来的应该是指通过原型链搜索变量的机制吧
当搜索一个变量时,会在实例属性中查找,找不到才会去原型对象中(对象的__proto__指向的对象)查找,一直到Object.prototype(因为在JavaScript中每一个函数都是对象),找到则返回,找不到则返回undefined
第三个问题:肯定是new+构造函数最早出现,因为对象字面量是后来开发人员为了简化操作推出的。再者其实执行了var obj = {};,其实系统内部真实的执行代码是这样的var obj = new Object();
var obj = {};
var obj = new Object();
第一个问题:MDN上有关于Object.create()的解释,可以看一下https://developer.mozilla.org...(英文有困难可以切换中文浏览)第二个问题:new 是个 JS 的关键字,这个语言底层机制可以猜测,但是就不敢说就是怎么样子的,它是怎么体现基于原型?这个问题有点怪异,我觉得JS对象的基于原型不是 new 体现出来的,而是这门语言的对象的原型链机制决定的,然后体显现出来的现象就是向上搜索机制(上面那位所说的搜索机制)第三个问题:当使用字面量创建对象时其实是首先创建了一个空对象{};让空对象的__proto__指向Object.prototype;将this绑定到这个空对象上面;将创建的对象中的属性与方法绑定到this上面;最后返回这个对象;基本上就是这个样子吧,如果错误请指出来,谢谢!(好让我的错误不会去误人子弟).
抱歉第一个问题我不太了解,等我研究研究再来补充。
第二个问题:
当我们创建一个构造函数,其内部就有一个Prototype属性,该属性是一个指针,指向了该构造函数的原型对象
通过new操作符+构造函数实例化出来的对象,内部有一个__proto__属性,该属性也指向了原型对象
我觉得能体现出来的应该是指通过原型链搜索变量的机制吧
当搜索一个变量时,会在实例属性中查找,找不到才会去原型对象中(对象的__proto__指向的对象)查找,一直到Object.prototype(因为在JavaScript中每一个函数都是对象),找到则返回,找不到则返回undefined
第三个问题:
肯定是new+构造函数最早出现,因为对象字面量是后来开发人员为了简化操作推出的。再者其实执行了
var obj = {};
,其实系统内部真实的执行代码是这样的var obj = new Object();
第一个问题:
MDN上有关于Object.create()的解释,可以看一下
https://developer.mozilla.org...(英文有困难可以切换中文浏览)
第二个问题:
new 是个 JS 的关键字,这个语言底层机制可以猜测,但是就不敢说就是怎么样子的,它是怎么体现基于原型?这个问题有点怪异,我觉得JS对象的基于原型不是 new 体现出来的,而是这门语言的对象的原型链机制决定的,然后体显现出来的现象就是向上搜索机制(上面那位所说的搜索机制)
第三个问题:
当使用字面量创建对象时其实是
首先创建了一个空对象{};
让空对象的__proto__指向Object.prototype;
将this绑定到这个空对象上面;
将创建的对象中的属性与方法绑定到this上面;
最后返回这个对象;
基本上就是这个样子吧,如果错误请指出来,谢谢!(好让我的错误不会去误人子弟).