私はOO js noobieの一種で、正しい方法で新しいJavascriptライブラリを作成しようとしていますが、これを行う方法を理解して正しく動作させるには苦労しています。 jsライブラリファイルがhtmlに含まれるとすぐにオブジェクトABC
がインスタンス化されるように、自分のライブラリを自己呼び出しするようにしたいと思います。ただし、ユーザーはhtmlページでそのオブジェクトのメソッドを呼び出すことができます。Javascriptライブラリオブジェクトメソッド宣言
私は以下のコードのいくつかの異なるバージョンを試しましたが、正しく動作するメソッドを宣言するためのプロトタイプメソッドを取得できないようです。私のHTMLページでは、ABC.alert();
と呼ぶことができ、それは適切に警告メッセージを実行します。しかし、私が理解しているプロトタイプ継承を使用しているABC.alert2();
を呼び出しようとすると、オブジェクトコンストラクタ内のメソッドを宣言するだけのメモリよりも効率的です。私はABC.alert2 is not a function
を得続けます。私のABCオブジェクトはprotoというプロパティを持っていますが、プロトタイプを使ってメソッドを適切に定義する方法はわかりません。自己呼び出し関数を使用しているからですか?自己呼び出し関数を使用せず、ライブラリの一番下に手動でオブジェクトの新しいインスタンスを手動で作成する必要があります。var ABC = new defineABC();
行ですか?また、下にコピーされた
:
(function (window) {
'use strict';
function defineABC() {
var ABC = {};
ABC.alert = function() {
alert("hello this is working");
};
ABC.prototype.alert2 = function() {
alert("hello prototype is working inside constructor");
};
return ABC;
}
defineABC.prototype.alert3 = function() {
alert("hello prototype is working outside constructor");
};
if (typeof(ABC) === 'undefined') {
window.ABC = defineABC();
}
})(window);
ABC.alert(); //successful
ABC.alert2(); //fails
ABC.alert3(); //fails
返信いただきありがとうございます!私はjsbinでこれを試しましたが、どちらも動作していないようです:[jsbin link](http://jsbin.com/fayegirati/1/edit?html,js,console,output)私が正しく理解していれば、オブジェクトの新しいインスタンスを作成するので、 'abc = new defineABC() 'メソッドは必要ありません。 'インスタンス化、正しい?最初のオブジェクトインスタンス化のために 'ABC.alert2();'を呼び出すことができるはずです...しかし、私がそれを試しても私にとってはうまくいかないのですか? – shredtechular
私は間違いました。私はそれが今働くはずの "新しい"が欠けていた。私はそれを編集しました – adrianj98
そして、あなたは新しいものをもう一度使う必要があります。私はちょうど説明としてそれを使用していた – adrianj98