0

过去几周我一直在学习代码学院,目前我正在学习 Javascript 基础知识 (42%) 的对象、函数和方法部分。我真的没有跳过任何内容,因为我真的很想好好学习。但是,我在理解函数、方法和对象的使用方面遇到了一些问题。

我了解一个对象是存储诸如现实世界信息之类的信息:

personObj=new Object();     
personObj.firstname="John";
personObj.lastname="Doe";
personObj.age=30;
personObj.eyecolor="blue";

另外,构造函数到底是什么?.this 是什么意思?

我也学会了创建函数,方法是

var whatever = new Function(){
 then whatever here
}

但在代码学院,他们开始编写代码:

function whatever(){
Then Whatever
}

有什么不同?我希望有人在“傻瓜的Javascript”类型中进行解释...

再次感谢!

4

4 回答 4

3

究竟什么是构造函数?

它们是为初始化对象而调用的函数。在 JavaScript 中,它们与new关键字一起实例化新对象。但是,最好不要使用new Object();空对象文字{}

.this 是什么意思?

this关键字引用当前上下文对象。在“方法”中,这通常是对象本身,但是一旦您独立调用函数,它可能会指向其他地方(最常见的错误 #2)。

我也学会了创建函数,方法是new Function(){ ... }

我希望你没有。这在语法上是无效的。您可以使用stringsFunction的构造函数创建函数,但绝不应该这样做。

在代码学院,他们开始编写代码:

function whatever(){ ... }

这是声明函数的标准方法。用它。然而,第二种可能性是函数表达式,它通常甚至是匿名的。请参阅JavaScript 中的函数表达式与声明有什么区别?,一个简单的例子:

function a() {
    ...
}
setTimeout(a, 500);
// or
setTimeout(function  () {
    ...         // ^^ a name could be inserted here if you need
                // to reference the function from inside
});
于 2012-07-24T20:08:31.883 回答
2

嘿,codecademy 哥们,我也上过同样的课程 :)
看看我能不能回答你的问题!

  • “我知道一个对象是存储诸如现实世界信息之类的信息”
    这并不完全准确。当 codecademy 以这种方式描述一个对象时,他们试图向您展示一个可以使用该对象的真实应用程序。
    一个对象实际上很像一个函数,但有一些区别:一个对象是“实例化的”。当一个对象被这样创建personObj=new Object();或像这样“构造”(我稍后会谈到)var newPerson = new Person(parameters);时,它会创建一个对象的特定实例。就其本身而言,一个对象只是一个想法,但是当您调用或“实例化”一个对象时,您正在创建它的一个特定实例,该实例可以在代码的其他地方引用。请参阅下一个答案以进行澄清!

  • “另外,构造函数到底是什么?.this 是什么意思?”
    构造函数就像模板或蓝图。它是将对象视为一个想法,当您创建一个新对象时,构造函数可以通过预先定义一些新对象的特性来为您节省一些时间。它为对象提供“方法”和属性(如.name)。一个方法就像一个有家的函数!方法是属于对象的函数,只能在引用对象时调用。函数的属性是特定于对象的变量,或该对象的“公共变量”。.dot 表示法是一种查看对象内部并引用其属性的方式。当您使用时,this.name您正在创建一个name属于 Person 对象的公共变量。this是一个关键字,它引用它在其中声明的函数(您将在即将到来的课程中了解更多关于这一切的信息,以及关于私有变量的信息)。

    这是一个例子:

    //Defines a constructor for making Person objects
    function Person(name, age){
      //creates a public variable "name" for all new People and assigns the name parameter to it 
      this.name = name;
      //creates a public variable "age" for all new People and assigns the age parameter to it 
      this.age = age;
      //creates a highFive() function that belongs to a Person
      this.highFive = function(){
        console.log("Thanks for the high-five bud!");
      };
    }
    

    这是一个构造函数。它是一个具有 name 和 age 属性的空白 Person,并且是一种让您高五的方法。它还没有被实例化,所以程序中不存在唯一的人。如果您需要结交很多人,它只是节省您时间的工具。
    如果我们想创建一个特定的人,我们可以这样做:
    var thatGuyJim = new Person("Jim",25);
    这是一个实例化的 Person 对象。它具有公共变量nameage,分别设置为 Jim 和 25。thatGuyJim当您提到保存对象实例的变量时,程序可以引用它。例如,如果我们想要高五吉姆,我们会这样做:thatGuyJim.highFive()
    当我们这样做时,我们正在使用该highFive()方法,一个属于 Person 构造函数的函数,并将其应用于我们的新 Person 对象thatGuyJim. 这将打印“感谢高五芽!” 到控制台。

  • var whatever = new Function(){stuff}“和有什么区别function whatever(){stuff}?”
    嗯,var whatever = new Function(){stuff};是定义函数的正常方式。
    function whatever(){stuff}另一方面是对象构造函数。将对象构造函数视为可以制作许多独特副本的复杂函数可能会有所帮助。从这行开始function让代码知道您正在声明一个新的对象构造函数而不是定义一个新函数,whatever()它是名称和参数,并且{stuff};可以保存它的变量和方法,或者只是它可以做的事情。

我希望这可以让您更深入地了解对象的性质,请随时要求我澄清任何事情 - 我会在工作时定期检查。

于 2012-07-24T21:01:18.773 回答
1

将构造函数视为为您设置对象然后返回它们的函数。也就是说,它们指定对象的方法(它们可以做的事情)和属性(描述它们的事情)。

非常不建议使用 Function 原型;创建匿名函数的常用方法是 via function () { /* stuff */ }(大小写很重要!)。说到这里,第一种方法将创建一个匿名函数(即内部没有名称——您可以使用name属性检查),而第二种方法将创建一个命名函数(因此将设置 name 属性)。

于 2012-07-24T19:48:18.553 回答
1

1.在一般的面向对象编程中,构造函数准备一个对象以供使用。它们在创建类时被调用,并用于实例化类。

在 JavaScript 中,构造函数只是一个常规函数。例如:

// constructor with parameter `name`

function cat(name) {
 this.name = name;
 this.talk = function() {
    alert( this.name + " say meeow!" )
 }
} 

cat1 = new cat("nyan")
cat2 = new cat("puss")

cat1.talk() // nyan say meeow!
cat2.talk() // puss say meeow!

2.函数声明和函数表达式的主要区别是:

//expresssion

whatever(); // results in error
var whatever = new Function(){
 then whatever here
}

-

// declaration

whatever(); // doesn't result in error
function whatever(){
Then Whatever
}
于 2012-07-24T19:53:31.040 回答