ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript の関数を詳しく理解する (コード付き)

JavaScript の関数を詳しく理解する (コード付き)

不言
不言転載
2019-04-11 13:59:393815ブラウズ

この記事では、JavaScript の関数を詳しく説明します (コード付き)。一定の参考価値があります。困っている友人は参照できます。お役に立てれば幸いです。

JavaScript の関数には複数の意味があります。これは、オブジェクト テンプレートの役割を果たすコンストラクターである場合もあれば、オブジェクトにメッセージを送信する役割を担うオブジェクトのメソッドである場合もあります。それは関数である場合もあります。はい、それは関数です。独立して存在し、オブジェクトと何の関係もなく呼び出すことができる関数です。

言語設計者の妥協により、JavaScript を Java のように見せ、「オブジェクト指向」にするために、いくつかのクラス関連の機能が JavaScript に追加されました。 JavaScriptはnewとthisを追加していますが、クラスはありません(ESは追加しています)。最後に、関数は一時的にクラスのタスクを引き受けます。

セマンティクス 1: コンストラクターとしての関数

/**
@class Tab
@param nav {string} 页签标题的class
@param content {string} 页面内容的class
**/
function Tab(nav, content) {
 this.nav = nav;
 this.content = content;
}
Tab.prototype.getNav = function() {
 return this.nav;
};
Tab.prototype.setNav = function(nav) {
 this.nav = nav;
};
Tab.prototype.add = function() {
};
// 创建对象
var tab = new Tab('tab-nav', 'tab-content');

ここでクラス Tab が定義され、オブジェクト タブが作成されます。上記では Function、this、new を使用しています。 this、new は一般的なオブジェクト指向言語のキーワードであり、ここでの function は従来のオブジェクト指向言語におけるクラスの役割を果たします。もちろん、このときの識別子の命名は一般的に「先頭文字を大文字にする」ルールに従います。

セマンティクス 2: オブジェクト メソッドとしての関数

JavaScript ではクラスを使用せずにオブジェクトを直接作成できるため、オブジェクトにメソッドを追加するには 2 つの方法があります。 1 つ目は、最初にクラスを定義し、プロトタイプ (上の例の Tab など) にメソッドをハングする方法です。プロトタイプには getNav、setNav、および add メソッドがあります。関数内でこれに直接メソッドを追加する別の方法もあります。

function Tab(nav, content) {
 this.nav = nav
 this.content = content
 this.getNav = function() {
// ...
}
 this.setNav = function() {
// ...
}
 this.add = function() {
// ...
}
}

Here Tab はセマンティクス、this.getNav/this.setNav/this.add はオブジェクトのメソッドとしてのセマンティクスです。あるいは、オブジェクトとそのメソッドを直接定義することもできます。

var tab = {
 nav: '',
 content: '',
 getNav: function() {
// ...
},
 setNav: function() {
// ...
},
 add: function() {
// ...
}
}

tab.getNav/tab.setNav/tab.add は、オブジェクト タブのメソッドとしてセマンティックです。
セマンティクス 3: 独立した関数として

/*
判断对象是否是一个空对象
@param obj {Object}
@return {boolean}
*/
function isEmpty(obj) {
 for (var a in obj) {
return false
}
 return true
}
// 定义一个模块
~function() {
 // 辅助函数
 function now() {
return (new Date).getTime()
}
 // 模块逻辑...
}();
// 采用CommonJS规范的方式定义一个模块
define(require, exports, moduel) {
 // 辅助函数
 function now() {
return (new Date).getTime()
}
 // 模块逻辑...
})

isEmpty はグローバル関数として存在し、モジュール定義ではローカル関数として存在します。isEmpty であろうと現在であろうと、ここでの関数はオブジェクトやクラスに依存せず、独立して呼び出すことができる関数です。
セマンティクス 4: 匿名関数定義モジュール

// 全局命名空间
var RUI = {}
// ajax.js
~function(R) {
 // 辅助函数...
 ajax = {
request: function() {
  // ...
}
getJSON: function() {
  // ...
}
...
}
 // 暴露出模块给 R
 R.ajax = ajax
}(RUI);
// event.js
~function(R) {
 // 辅助函数...
 // 事件模块定义...
 // 暴露出模块给 R
 R.event = event
}(RUI);
// dom.js
~function(R) {
 // 辅助函数...
 // DON模块定义...
 // 暴露出模块给 R
 R.dom = dom
}(RUI);

ここでの匿名関数は、実行後に API オブジェクトを RUI に公開します。匿名関数内でどれだけ作業が行われても、対応する外部からは参照できません。匿名関数なので特に注意する必要はありません。最後にパブリック API メソッドですが、これらのメソッドのパラメータと意味を理解していれば、すぐに使用できます。

セマンティクス 5: 匿名関数は、変数をあまり公開せずに一部のデータを処理するなど、特定の特殊効果を処理します。

// 判断IE版本的hack方式
var IEVersion = function() {
 var undef, v = 
 var p = document.createElement('p')
 var all = p.getElementsByTagName('i')
 while (
p.innerHTML = &#39;<!--[if gt IE &#39; + (++v) + &#39;]><i></i><![endif]-->&#39;,
all[]
);
 return v > ? v : undef
}();

最終的には、結果の IEVersion が 1 つだけになり、いくつかのローカル変数が内部で使用されます。匿名関数はすべて Isolate で使用できます。この方法は、一時的なデータ処理には非常に効果的でコンパクトです。 [関連する推奨事項: JavaScript ビデオ チュートリアル ]

以上がJavaScript の関数を詳しく理解する (コード付き)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。