码迷,mamicode.com
首页 > 其他好文 > 详细

何时使用构造函数,构造函数使用new关键字

时间:2019-09-01 01:48:36      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:构造函数   一个   方法   因此   his   基本数据   多实例   erro   rop   

关于何时使用js的构造函数
    一般创建多个有相同属性/方法的对象,就会去写构造函数,就会去new
    如果只是一个单独的对象,直接使用字面量就行了

var person = {
    name:‘postbird‘,
    address:‘earth‘,
    sayHello:function(){console.log(‘Hello,I am ‘ + this.name);}
};
js构造函数创建对象加new问题

/*
    new操作符做了些什么呢:
      1、创建一个新对象
      2、将构造函数的作用域赋给新对象(因此 this 就指向了这个新对象)
      3、执行构造函数中的代码(为这个新对象添加属性)
      4、返回新对象。
*/

function Obj(name){
    this.name = name;    
    console.log(this); // 严格模式下是undefined 非严格模式下是window对象
}
var a= Obj("name11"); // undefined
a.name; //Uncaught TypeError: Cannot read property ‘name‘ of undefined
var b = new Obj(‘name22‘);  //Obj {name: "name22"}
b.name; //name22


//使用new操作符创建对象,并且构造函数没有返回值或者返回为基本数据类型,那么返回该对象
function Obj(name){
    this.name = name;
}
var b = new Obj(); //Obj { name: undefined }

function Obj(name){
    this.name = name;
    return ‘chic‘;
}
var b = new Obj(); //Obj {name: undefined}

//使用new操作符创建对象,并且构造函数返回一个引用类型
function Obj02(name){
    this.name = name;
    return {};
} 
var a02 = Obj02("name11"); //Object {}
a02.name; //undefined
var b02 = new Obj02(‘name22‘);  //Object {}
b02.name;//undefined

/**
 * 总结:
 *  对于不加new来执行构造函数来说,返回值就是构造函数的执行结果
 *  对于加new关键字来执行构造函数而言,如果return的是基本数据类型,那么忽视掉该return值,
 *  对于加new关键字来执行构造函数而言,如果返回的是一个引用类型,那么返回该引用类型
 */

 


如果你的对象有很多实例,或者涉及继承或者构造函数传参

function Person(name,address){
    this.name = name;
    this.address = address;
}
Person.prototype.sayHello = function(){
    console.log(‘Hi I am ‘ + this.name);
}

var p1 = new Person(‘postbird‘,‘earth‘);
var p2 = new Person(‘ptbird‘,‘month‘);
总的来说,构造函数应用比较广泛,如果只是简单地对象,使用字面量就够了。

构造函数在对象实例化、继承等应用还是比较多的

 

何时使用构造函数,构造函数使用new关键字

标签:构造函数   一个   方法   因此   his   基本数据   多实例   erro   rop   

原文地址:https://www.cnblogs.com/slightFly/p/11441122.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!