2017-04-16 85 views
0

当前我正在学习对象,我不确定某些单词和描述的术语。我敢肯定你们中的一些可以帮助我在这里:)关于面向对象编程的一些基本问题

代码示例:

function Person(name) { 
    this.name = name, 
    this.introduce = function() { 
     console.log("My name is " + this.name); 
    } 
} 

var jon = new Person("Jon") 
jon.introduce(); 

我的问题:

  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(); 
    

哪一个是更好的做法?我猜是第一个代码片段,因为它代码少。

  1. 现在的术语。

2.1我是否正确,在开始的代码示例中,您称为Prototype的以下片段?

function Person(name) { 
     this.name = name, 
     this.introduce = function() { 
      console.log("My name is " + this.name); 
     } 
    } 

2.2我是否正确,在开始的代码示例中,您称构造函数(-function)为以下代码片段?

var jon = new Person("Jon") 

谢谢东方快乐! :)

+0

这三个问题,你应该将它们分开成三个独立的帖子。否则,访问者更难以搜索,这使得你的主题太宽泛。 – Rob

回答

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(); 

此功能是匿名的,没有名称。我们可以指定一个名字,但是 它不是必需的,因为变量可以用来执行该功能。这被称为函数表达式

您可以了解更多关于此功能的语句和表达式:

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之间的差异。我会去看似简单的声明,而不是分配给变量的匿名匿名函数。

    1. 这片段显示了构造函数也jon.constructor返回。由构造函数构造的人的原型 - 您可以通过Object.getPrototypeOf(jon)Person.prototype访问 - 几乎是空的。分配this.name = name不会向原型添加名称属性,而是为当前创建的对象添加名称属性。

    2. 这是new operator应用于构造函数返回一个新构造的对象。