什么是Javascript对象的差异" new"关键词

时间:2017-03-18 19:02:10

标签: javascript oop javascript-objects

有人可以告诉我有什么区别:

function Customer(name, age) {
    this.Name = name;
    this.Age = age;
}

var cust1 = new Customer('Your Name', 20);
var name1 = cust1.Name;
var age1 = cust1.Age;

function Customer() {
    return {
        Name: 'Your Name',
        Age: 20
    }
};

var cust2 = Customer();
var name2 = cust2.Name;
var age2 = cust2.Age;

毕竟它产生相同的输出,但是机制是不同的,我不确定为什么。

" new"的目的是什么?在第一个虽然我可以这样做:

var cust1 = Customer('Your Name', 20);
var name1 = cust1.Name;
var age1 = cust1.Age;

2 个答案:

答案 0 :(得分:3)

第一个使用构造函数,第二个使用工厂函数

构造函数是您使用new关键字调用的函数。这样做会为您分配一个新对象,并使this成为对这个新对象的引用,这样您就可以轻松地对其进行变异。构造函数基本上是语法糖,模仿其他OOP语言构造来创建新对象。

工厂是返回普通对象的简单函数。您负责自己分配新对象并将其返回。

结果完全相同,因为您不能将instanceof与通过工厂函数创建的对象一起使用。

两者都有超越这个问题的优点和缺点:Constructors vs Factory Methods

答案 1 :(得分:0)

输出相等(更少)但代码的行为方式有两种不同的方式

在第一种情况下,'功能'用作新Js对象的构造函数 不同的是,在第二种情况下,'功能'只返回一个对象。

这两种方法之间没有真正的区别,但第一种方法更常用和推荐

console.log()这两个导致:
构造函数:Customer { Name: 'Your Name', Age: 20 }
return obj:{ Name: 'Your Name', Age: 20 }