0

私は過去数週間コードアカデミーをやっていて、現在Javascript Fundamentals(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
}

違いは何ですか?「JavascriptforDummies」タイプで誰かに説明してもらいたいです...

再度、感謝します!

4

4 に答える 4

3

コンストラクターとは正確には何ですか?

これらは、オブジェクトを初期化するために呼び出される関数です。newJavaScriptでは、キーワードとともに、新しいオブジェクトをインスタンス化します。new Object();ただし、空のオブジェクトリテラルを使用する代わりに、リテラルを使用することをお勧めします{}

そして、これはどういう意味ですか?

thisキーワードは、現在のコンテキストオブジェクトを参照します。「メソッド」内では、これは通常オブジェクト自体ですが、関数をスタンドアロンで呼び出すと、別の場所を指す場合があります(最も一般的なエラー#2)。

関数の作成も学びました。方法はnew Function(){ ... }

私はあなたがしなかったことを望みます。これは構文的に無効です。文字列Functionからコンストラクターを使用して関数を作成できますが、絶対に作成しないでください。

コードアカデミーでは、彼らは次のようにコーディングを開始しました。

function whatever(){ ... }

これは、関数を宣言するための標準的な方法です。これを使って。ただし、2番目の可能性は関数式であり、多くの場合匿名ですらあります。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);ます)、オブジェクトの特定のインスタンスが作成されます。オブジェクト自体は単なるアイデアですが、オブジェクトを呼び出したり「インスタンス化」したりすると、コード内の他の場所で参照できるオブジェクトの特定のインスタンスが作成されます。明確にするために次の答えを見てください!

  • 「また、コンストラクターとは正確には何ですか?これはどういう意味ですか?」
    コンストラクターは、テンプレートまたは青写真のようなものです。これはアイデアとしてのオブジェクトであり、新しいオブジェクトを作成する場合、コンストラクターは新しいオブジェクトの品質の一部を事前に定義することで時間を節約できます。オブジェクトに「メソッド」と属性(のような.name)を提供します。メソッドは、ホームを持つ関数のようなものです。メソッドは、オブジェクトを参照してのみ呼び出すことができるオブジェクトに属する関数です。関数の属性は、オブジェクトに固有の変数、またはそのオブジェクトの「パブリック変数」です。.dot表記は、オブジェクトの内部を調べてその属性を参照する方法です。を使用すると、Personオブジェクトに属するthis.nameパブリック変数を作成することになります。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オブジェクトです。パブリック変数nameとがありage、それぞれジムと25に設定されています。thatGuyJimオブジェクトのインスタンスを保持する変数について言及すると、プログラムはそれを参照できます。たとえば、ジムをハイタッチしたい場合は、次のようにします。これを行うときは、Personコンストラクターに属する関数であるメソッドthatGuyJim.highFive()
    を使用し、それを新しいPersonオブジェクトに適用します。highFive()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

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 に答える
1

コンストラクターは、オブジェクトをセットアップして返す関数と考えてください。つまり、オブジェクトのメソッド(実行できること)とプロパティ(オブジェクトを説明すること)を指定します。

関数プロトタイプを使用することはお勧めできません。匿名関数を作成する通常の方法はviaですfunction () { /* stuff */ }(大文字と小文字が重要です!)。そういえば、最初の方法は無名関数を作成します(つまり、内部的に名前はありません。これはnameプロパティで確認できます)。一方、2番目の方法は名前付き関数を作成します(したがって、nameプロパティが設定されます)。

于 2012-07-24T19:48:18.553 に答える