Kob*_*orl 6 javascript constructor object
function Person(age,name){
this.name = name;
this.age = age;
this.speak = function(){...}
}
function Person(age,name){
var p = {}
p.name = name;
p.age = age;
p.speak = function(){...}
return p;
}
Run Code Online (Sandbox Code Playgroud)
我看到的唯一区别是使用第一个你必须用new调用让语言知道它构造一个新对象,它本质上只是构造一个对象,其中'this'指的是正在创建的新对象??
就像这样做.
{
age: 12,
name: "mark",
speak: function(){...}
}
Run Code Online (Sandbox Code Playgroud)
第二个返回一个对象,你可以写
Person(12,"mark")
Run Code Online (Sandbox Code Playgroud)
代替
new Person(12,"mark")
Run Code Online (Sandbox Code Playgroud)
所以我想我的问题是,使用第二个版本是否有什么问题,我说的差异是正确的,它们是两者之间的唯一区别吗?
第一个:
function Person(age,name){
this.name = name;
this.age = age;
this.speak = function(){...}
}
Run Code Online (Sandbox Code Playgroud)
instanceof Personnew.class和extends语法如何工作,这可能是将来很多Javascript的写法.第二个:
function Person(age,name){
var p = {}
p.name = name;
p.age = age;
p.speak = function(){...}
return p;
}
Run Code Online (Sandbox Code Playgroud)
instanceof.new并且仍然可以工作(系统创建的新对象将被丢弃).除了这些差异之外,两者的功能大致相同,并且在任何一种方法中技术上都没有"错误".
Javascript中有两种编程风格的倡导者,有些人会说有一种情况比另一种情况更合适,反之亦然.我建议你为这个对象构建一些子类来清除一些编程差异,因为子类的工作方式也不同.
如果你想搜索关于这个主题的其他文章,这基本上是"构造函数与Javascript中的工厂函数",它有时会偏离参与/反对使用.prototype,但也倾向于覆盖你的主题.
以下是关于该特定主题的一些文章(涵盖了一系列意见):