用关键字new创建对象 new都做了什么
2018-03-13 14:28
218 查看
function Person () {
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () {
return this.name;
};
}
var person = new Person(“tom”, 21, “WEB”);
console.log(person.name);
使用关键字new创建新实例对象经过了以下几步:1、创建一个新对象,如:var person = {};2、新对象的_proto_属性指向构造函数的原型对象。3、将构造函数的作用域赋值给新对象。(也所以this对象指向新对象)4、执行构造函数内部的代码,将属性添加给person中的this对象。5、返回新对象person。var person = {};
person._proto_ = Person.prototype; //引用构造函数的原型对象
Person.call(person); //将构造函数的作用域给person,即:this值指向person
当采用构造器调用模式时,即使用new关键字去调用一个函数时,函数执行的方式会被修改。如果new是一个方法而不是一个运算符时,它可能会这样执行:Function.methos(“new”, function () {
//新创建一个对象,它继承了构造器的原型对象。
var that = Object.create(this.prototype); //此时,this是指向Function构造器的。
//调用构造器,绑定this对象到新对象that上
var other = this.apply(that, argument); //此时,this对象指向that对象。
//如果它的返回值不是一个对象,就返回新的对象。
return (typeof other === “object” && other) || that;
});
以上代码,也可以说明在调用new关键字时,发生了什么事,或者说是调用new关键字创建的新对象经历了哪些步骤后拥有了函数的特性。 注意:通过new关键字创建某构造函数的新实例对象,就是将原型链与实例的this联系起来,this指向这个新对象,同时也指向这个构造函数,并且this对象还是这个构造函数的实例。如果没有使用new操作符,直接用构造函数创建新实例对象,那么this对象就指向了window对象,不会指向这个新对象的,不管给这个新对象添加什么属性,都没有用,是直接添加到了window对象上了。
this.name = name;
this.age = age;
this.job = job;
this.sayName = function () {
return this.name;
};
}
var person = new Person(“tom”, 21, “WEB”);
console.log(person.name);
使用关键字new创建新实例对象经过了以下几步:1、创建一个新对象,如:var person = {};2、新对象的_proto_属性指向构造函数的原型对象。3、将构造函数的作用域赋值给新对象。(也所以this对象指向新对象)4、执行构造函数内部的代码,将属性添加给person中的this对象。5、返回新对象person。var person = {};
person._proto_ = Person.prototype; //引用构造函数的原型对象
Person.call(person); //将构造函数的作用域给person,即:this值指向person
当采用构造器调用模式时,即使用new关键字去调用一个函数时,函数执行的方式会被修改。如果new是一个方法而不是一个运算符时,它可能会这样执行:Function.methos(“new”, function () {
//新创建一个对象,它继承了构造器的原型对象。
var that = Object.create(this.prototype); //此时,this是指向Function构造器的。
//调用构造器,绑定this对象到新对象that上
var other = this.apply(that, argument); //此时,this对象指向that对象。
//如果它的返回值不是一个对象,就返回新的对象。
return (typeof other === “object” && other) || that;
});
以上代码,也可以说明在调用new关键字时,发生了什么事,或者说是调用new关键字创建的新对象经历了哪些步骤后拥有了函数的特性。 注意:通过new关键字创建某构造函数的新实例对象,就是将原型链与实例的this联系起来,this指向这个新对象,同时也指向这个构造函数,并且this对象还是这个构造函数的实例。如果没有使用new操作符,直接用构造函数创建新实例对象,那么this对象就指向了window对象,不会指向这个新对象的,不管给这个新对象添加什么属性,都没有用,是直接添加到了window对象上了。
相关文章推荐
- 用关键字new创建对象 new都做了什么(随笔)
- Java虚拟机——new关键字创建对象的过程
- scala不使用new关键字创建对象实例
- Java对象创建之new关键字和newinstance()方法
- 使用new关键字创建对象的三个作用
- new一个类对象和使用类名创建一个对象有什么区别?
- Java对象的创建 —— new之后JVM都做了什么?
- Java中关于关键字new创建字符串对象的总结
- new关键字创建的对象的实例化过程
- Java对象的创建 —— new之后JVM都做了什么?
- c++ new 和 不 new创建出来的对象有什么区别
- 《JavaScript设计模式与开发实践》——JavaScript中使用new关键字创建对象实例
- JS 对象和数组的创建使用new和不使用new有什么区别呢?
- new一个类对象和使用类名创建一个对象有什么区别?该怎么解决
- 第2章 Java编程基础——FAQ2.22 创建String对象时, 使用String s=new String (“abc”)和String s=“abc”语句有什么区别?
- Class.forName(XX).newInstance()创建对象和new关键字创建对象区别
- Class.forName(XX).newInstance()创建对象和new关键字创建对象区别
- 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?
- 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?
- 1.在使用new创建数组后,此时数组还是一个引用数组。 只有再创建新的对象,并把对象赋值给数组引用,到此初始化结束2.什么是引用类型?