2012-07-24 81 views
0

我一直在做代码学院在过去的几个星期,我目前正在做Javascript对象(42%)的对象,函数和方法部分。我没有真正跳过任何一点,因为我真的想要正确地学习。但是,我在理解函数,方法和对象的使用方面遇到了一些问题。方法,函数和对象

我明白,一个目的是将信息存储为现实世界的信息,例如:

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

此外,究竟是什么构造?这是什么意思?

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

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

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

function whatever(){ 
Then Whatever 
} 

请告诉我有什么区别?我希望有人在“Javascript for Dummies”类型中解释...

再次感谢!

+1

*另外,什么是构造函数?这是什么意思?*这里的小行很好的答案,可能需要几页。我建议先抓一个好的Javascript书,建议:“专业的Javascript for WebDevelopers” – jAndy 2012-07-24 19:46:53

+0

我相信你应该从学习中检查另一个资源,请检查http://hangar.runway7.net/javascript-guide-to-对象函数作用域-prototpyes性关闭。任何其他帮助,请告诉我。 – axcdnt 2012-07-24 19:46:55

+0

@jAndy Nicholas C. Zakas? – 2012-07-24 21:17:08

回答

2

嘿哥们Codecademy网站,我一直在经历同样的过程:)
让我们来看看,如果我可以回答您的问题!

  • “据我所知,一个目的是将信息存储为现实世界的信息,例如”
    这是不完全准确。当codecademy以这种方式描述一个对象时,他们试图向您展示一个真实世界的应用程序,它将利用一个对象。
    一个对象实际上很像一个函数,但有一些不同之处:对象是“实例化”的。当像这样创建一个对象personObj=new Object();或像这样var newPerson = new Person(parameters);这样的“构造”(我会在那一刻得到它)时,它创建一个对象的特定实例。在它本身上,一个对象只是一个想法,但是当你召唤或“实例化”一个对象时,你正在创建一个可以在代码中其他地方引用的特定实例。请参阅下面的答案以获得澄清!

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

    下面是一个例子:

    //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!"); 
        }; 
    } 
    

    这是一个构造。这是一个空白的具有名称和年龄属性的人,以及一个可以让你高五位的方法。它没有被实例化,所以程序中没有独特的人存在。这只是一个节省时间的工具,如果你需要制造很多人。
    如果我们想制作一个特定的人,我们可以这样做:
    var thatGuyJim = new Person("Jim",25);
    这是一个实例化的Person对象。它具有公共变量nameage,分别设置为吉姆和25。当您提到包含对象实例的变量thatGuyJim时,程序可以引用它。例如,如果我们想要高五Jim,我们会这样做: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};可以容纳它的变量和方法,或者只是它可以做的事情。

我希望这可以让您更深入地了解物体的性质,随时要求我澄清任何事情 - 我会定期作为我的工作回来查看。

+0

谢谢你队友,真的帮助我与其他成员一起理解它! – 2012-07-24 21:17:51

+0

我很高兴能帮上忙!继续学习,他们会开始提供更复杂的答案,以提供更多的背景知识,尤其是OOP第II部分中的项目 – user1542645 2012-07-24 21:31:01

1

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

使用函数原型是高度unadvised;创建匿名函数的常用方法是通过function() { /* stuff */ }(案例很重要!)。说到这一点,第一种方法将创建一个匿名函数(即内部没有名称 - 您可以使用name属性来检查它),而第二种方法将创建一个命名函数(因此name属性将被设置)。

+0

OP没有使用函数原型。 – Bergi 2012-07-24 20:09:43

+0

'new Function(){}'? – 2012-07-24 20:12:53

+0

[那](https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function)是一个构造函数,而不是原型对象。而且,它在语法上无效。 – Bergi 2012-07-24 20:15:51

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 
} 
+0

谢谢您花时间!这是非常有益的! – 2012-07-24 21:18:03

3

究竟是什么构造?

它们是被调用来初始化对象的函数。在JavaScript中,与new keyword一起,它们实例化新的对象。但是,不使用new Object();,则优先使用空对象字面值{}

这是什么意思?

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

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

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

代码学院,他们开始与编码:

function whatever(){ ... }

这是声明函数的标准方式。用它。然而,第二种可能性是函数表达式,通常甚至是匿名的。见What is the difference between a function expression vs declaration in JavaScript?,一个简单的例子:

function a() { 
    ... 
} 
setTimeout(a, 500); 
// or 
setTimeout(function () { 
    ...   // ^^ a name could be inserted here if you need 
       // to reference the function from inside 
});