扫码关注官方订阅号
比如一个构造函数Test
function Test(){ // 代码} var test1=new Test();
当new的时候,内部究竟发生了什么?
走同样的路,发现不同的人生
object 大法好
在一切皆为对象的时代,js 的 Object 可以让我们创建很多相同的对象,继承对象,扩展对象,所以楼主的 new 也可以这么玩:
js
Object
new
//楼主对象 function Test(){ // 代码 return '楼主'; } //楼主想要找个 对象1 了 var test1 = new Object(); //楼主产生了一个想法 test1 = Test(); // 楼主希望 对象1 和 对象 长的一样 ,所以 `text1` 也会返回 `楼主`
在 JavaScript 中,使用 new 关键字后,意味着做了如下四件事情:
JavaScript
创建一个新的对象,这个对象的类型是 object;
object
设置这个新的对象的内部、可访问性和[[prototype]]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;
[[prototype]]
prototype.construtor
执行构造函数,当this关键字被提及的时候,使用新创建的对象的属性; 返回新创建的对象(除非构造方法中返回的是‘无原型’)。
this
在创建新对象成功之后,如果调用一个新对象没有的属性的时候,JavaScript 会延原型链向止逐层查找对应的内容。这类似于传统的‘类继承’。
注意:在第二点中所说的有关[[prototype]]属性,只有在一个对象被创建的时候起作用,比如使用 new 关键字、使用 Object.create 、基于字面意义的(函数默认为 Function.prototype ,数字默认为 Number.prototype 等)。它只能被Object.getPrototypeOf(someObject) 所读取。没有其他任何方式来设置或读取这个值。
Object.create
Function.prototype
Number.prototype
Object.getPrototypeOf(someObject)
摘自
送上权威文档飞机票
1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。 2、属性和方法被加入到 this 引用的对象中。 3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。
var obj = {}; obj.__proto__ = Base.prototype; Base.call(obj);
new操作符具体干了什么呢?
可以看下我以前写的文章 http://www.cnblogs.com/zichi/...
应该知道new 就相当于 产出了个对象对吧。所以呢,他的基本内部原理是这样的 它定义了一个 {} 对象。然后这个对象继承了相应构造函数 的属性,方法,__proto__什么的,然后 再把这个对象 给 return 出来。所以你得到的这个test1就继承了函数 Test的东东。其实在js里面你可以理解成所有的对象都是由函数产生的(null是个例外)。上面的说法就映射了这个道理。当然这个时候你可能会反驳说 var object = {};这样不也生成了个对象吗,其实这个本质也是个函数new出来的,可以理解为 new Object();只是写法不一样了!
创建一个新的对象,这个对象的类型是object。
该对象的prototype设置为构造器的prototype属性,即this.prototype = Foo.prototype (伪代码)
执行构造器函数。
如果构造器函数有返回值,则以该对象作为返回值。若没有return或return了基本类型,则将上述的新对象作为返回值。
new 其实很像 克隆的一个过程。 具体自己体会
构造对象的作用域链表
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
在一切皆为对象的时代,
js的Object可以让我们创建很多相同的对象,继承对象,扩展对象,所以楼主的new也可以这么玩:楼主在创建时干了什么?
new关键字做了什么创建一个新的对象,这个对象的类型是
object;设置这个新的对象的内部、可访问性和
[[prototype]]属性为构造函数(指prototype.construtor所指向的构造函数)中设置的;执行构造函数,当
this关键字被提及的时候,使用新创建的对象的属性; 返回新创建的对象(除非构造方法中返回的是‘无原型’)。在创建新对象成功之后,如果调用一个新对象没有的属性的时候,
JavaScript会延原型链向止逐层查找对应的内容。这类似于传统的‘类继承’。摘自
送上权威文档飞机票
1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。
2、属性和方法被加入到 this 引用的对象中。
3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。
new操作符具体干了什么呢?
可以看下我以前写的文章 http://www.cnblogs.com/zichi/...
应该知道new 就相当于 产出了个对象对吧。所以呢,他的基本内部原理是这样的 它定义了一个 {} 对象。然后这个对象继承了相应构造函数 的属性,方法,__proto__什么的,然后 再把这个对象 给 return 出来。所以你得到的这个test1就继承了函数 Test的东东。其实在js里面你可以理解成所有的对象都是由函数产生的(null是个例外)。上面的说法就映射了这个道理。当然这个时候你可能会反驳说 var object = {};这样不也生成了个对象吗,其实这个本质也是个函数new出来的,可以理解为 new Object();只是写法不一样了!
创建一个新的对象,这个对象的类型是object。
该对象的prototype设置为构造器的prototype属性,即this.prototype = Foo.prototype (伪代码)
执行构造器函数。
如果构造器函数有返回值,则以该对象作为返回值。若没有return或return了基本类型,则将上述的新对象作为返回值。
new 其实很像 克隆的一个过程。 具体自己体会
构造对象的作用域链表