目前我正在学习对象,但我不确定某些词语和描述的术语。我相信你们中的一些人可以帮助我:)
代码示例:
header( "location: readMore.php?id=".$post[ 'post_id' ]);
我的问题:
上面的代码与以下代码之间是否存在差异:
function Person(name) {
this.name = name,
this.introduce = function() {
console.log("My name is " + this.name);
}
}
var jon = new Person("Jon")
jon.introduce();
哪一个更好的做法?我猜第一个代码片段,因为代码较少。
2.1我是否正确,考虑到开头的代码示例,您将以下代码段称为原型?
var Person = function(name) {
this.name = name,
this.introduce = function() {
console.log("My name is " + this.name);
}
}
var jon = new Person("Jon")
jon.introduce();
2.2我是否正确,在开头的代码示例中,您将下面的代码段调用为构造函数(-function)?
function Person(name) {
this.name = name,
this.introduce = function() {
console.log("My name is " + this.name);
}
}
谢谢,祝福东方! :)
答案 0 :(得分:2)
第1点:大词
function Person(name) {
this.name = name,
this.introduce = function() {
console.log("My name is " + this.name);
}
}
var jon = new Person("Jon")
jon.introduce();
此功能的名称为“人物”。这称为功能声明。
var Person = function(name) {
this.name = name,
this.introduce = function() {
console.log("My name is " + this.name);
}
}
var jon = new Person("Jon")
jon.introduce();
这个功能是匿名的,没有名字。我们可以分配名称但是 因为变量可用于执行函数,所以不需要它。这称为函数表达式。
您可以在此处阅读有关Function语句和表达式的更多信息:
https://javascriptweblog.wordpress.com/2010/07/06/function-declarations-vs-function-expressions/
第2点:执行(吊装)
由于提升的工作方式,在定义函数后必须调用赋给变量的函数。
因此,对于第一种情况,可以在其下方或上方调用函数。
但是对于第二种情况,必须在之后调用函数。因为它存储在变量中。在函数之前调用它将返回undefined。它不会给出错误。变量存在于内存空间中,但此时未定义。
您可以在此处阅读有关变量和功能提升的更多信息:
http://adripofjavascript.com/blog/drips/variable-and-function-hoisting
第3点:函数构造函数:
在您的情况下,用于函数的术语是“函数构造函数”,因为您实际上是使用函数作为Person对象的构造函数来定义它的属性。
答案 1 :(得分:1)
这只是function expression vs. declaration之间的区别。我会使用看似简单的声明,而不是分配给变量的未命名匿名函数。
该片段显示jon.constructor
也返回的构造函数。由该构造函数构造的人的原型 - 您可以通过Object.getPrototypeOf(jon)
或Person.prototype
访问 - 几乎是空的。分配this.name = name
不会为原型添加名称属性,而是添加当前创建的对象。
应用于返回新构造对象的构造函数的new operator。