如果构造函数中有'return',那么javascript中的new运算符已经完成了什么?

时间:2016-05-17 06:15:25

标签: javascript

function Person1(name) {
    this.name = name;
}
function Person2(name) {
    this.name = name;
    return this.name;
}
function Person3(name) {
    this.name = name;
    return new Array();
}
function Person4(name) {
    this.name = name;
    return new String(name);
}
function Person5(name) {
    this.name = name;
    return function() {};
}


var person1 = new Person1('xl');  // {name: 'xl'}
var person2 = new Person2('xl');  // {name: 'xl'}
var person3 = new Person3('xl');  // []
var person4 = new Person4('xl');  // 'xl'
var person5 = new Person5('xl');  // function() {}

地球上的javascript中的新运算符发生了什么?特别是person1和person2之间的区别。

1 个答案:

答案 0 :(得分:0)

new运算符创建了Person函数/类的一个新实例,你必须意识到当使用new new时该函数被视为类似于任何其他语言(c#,java,Python)的类,所以它创建了一个Person类的新上下文,每个上下文都不识别Person对象的其他上下文,它独立存在,

在你的例子中,你创建了5个不同的人函数,这些函数彼此相同,而你只需创建1个Person函数,并从他创建5个不同的实例

 var person1 = new Person('xl'); 
var person2 = new Person('xl'); 
var person3 = new Person('xl');  
var person4 = new Person('xl'); 
var person5 = new Person('xl')

// person1 != person2 
// person1.name == person2.name

这里的每个人都是同一个班级的不同实例 - 人。

当使用new运算符时,你可以使用函数内部的reuturb语句,它并不意味着abything,new运算符的返回值将是新对象的实例 - 因此 - 函数内的'this'关键字,这是实例的上下文。

您可以在此链接中深入了解JavaScript类和对象继承 - https://developer.mozilla.org/en/docs/Web/JavaScript/Inheritance_and_the_prototype_chain