有人可以告诉我有什么区别:
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;
答案 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 }