0


0

スーパークラスから継承された共通のプロパティとメソッド、およびサブクラスのオブジェクト固有のプロパティとメソッドを持つ階層内に複数のオブジェクトがあります。 私はまだOOP Javascriptに慣れていないので、おそらくもっと良い方法があります。 私はAJAXにjQueryを使用していますが、それが違いをもたらすかどうかはわかりません。

function Obj(input){this.in = input; this.out = {content:this.in、カテゴリ:{}、所有者:utils.getValidUser()、状態:0、メタ:{}}; this.process = function(){console.log( "No Process Defined"); }}

function MovieObj(入力){this.inheritFrom = Obj; this.inheritFrom(); this.out.type = "movie"; }

function ActionMovie(入力){this.inheritFrom = MovieObj; this.inheritFrom(); this.out.genre = "アクション"; this.process = function(){console.log( "movie search"); $ .getJSON( "/ api / search /" escape(this.out.content)、function(data){/ *私はajax呼び出しから戻ってきたものに従ってオブジェクトのプロパティを変更したいのです。 * /}); }}

2 Answer


2


これは私の以前のコードへのプロトタイプのアプローチ、そして呼び出し側のオブジェクトへの単純な参照で、これは継承の問題とスコープの問題の両方を解決します。

// Define Superclass
function Obj(input){this.content = input; this.type = "object"; this.owner = utils.getValidUser(); this.state = 0。 Obj.prototype.process = function(){console.log( "プロセスが定義されていません"); ;

// Define Movie Subclass
関数MovieObj(入力){Obj.call(これ、入力); this.type = "movie"; MovieObj.prototype = new Obj();

// Define ActionMovie as subclass of Movie and apply new process method.
function ActionMovie(入力){MovieObj.call(これ、入力); this.genre = "アクション"; ActionMovie.prototype = new MovieObj(); ActionMovie.prototype.process = function(){var _obj = this; $ .getJSON( "/ api / search /" escape(this.content)、function(data){/ *私はajax呼び出しから戻ってきたものに従ってオブジェクトのプロパティを変更したいのです。 * / _obj.meta.title data.title; ;)); }}

これは実際にはうまくいっていますが、いくつか注意点があります。 書かれているように、スーパークラスのコンストラクタは新しいオブジェクトが定義されるたびに呼ばれるので、たくさんの不必要な呼び出しが行われます。

このコードは、次のリンクに含まれている情報に基づいています。これは、Mozilla固有の回避策についても説明しています。http://www.spheredev.org/wiki/Prototypes_in_JavaScript


0


オブジェクト指向のJavaScriptに対するちょっと奇妙なアプローチ:)

オブジェクトを構築するために慣れ親しんだ他の言語で使用しているモデルを実装したいのです。 私はthis.inheritFromについてです。 JSにはクラスがなく、オブジェクトはオブジェクトから直接継承しています。 一つの方法(ウェブではたくさんの議論があります)は、 `new`キーワードでそれを行うことです。

var MovieObj = new Obj(入力); MovieObj.out.type = "movie";

すべての喜びのためにあなたはプロトタイプ継承に慣れる必要があり、そしてあなたのコードは以下のようになるでしょう。

function Obj(input){/ *ここにあるもの* /};

関数MovieObj(){}; MovieObj.prototype = new Obj(); MovieObj.prototype.constructor = MovieObj(); MovieObj.protorype.out.type = 'movie';

var actionMovie = new MovieObj(); / *あなたの最後のオブジェクトactionMovieを使ってここでいくつかのことをする* /

それがあなたがoo jsと他のoo言語との違いを理解するのに役立つことを願っています。 明確でないものがあれば、コメントで遠慮なく質問してください(私の英語をごめんね)。