0

jsでプロトタイピングを使用する方法を学ぼうとしています。

最初の問題:

$()jQueryのような機能をやりたいです。このように呼び出すと機能しますが、呼び出すとJo("header h1")機能しませんJo.infos()

var Jo = function( selector ){

    return new Jo.init(selector);

};

Jo.prototype = {
    infos: function(){
        return "Hello! I'm Jo, I'm here to make your life easier";
    }
};

Jo.init = function( selector ){

    this.selector = selector;

};

エラーはどこにありますか?どうすれば修正できますか?

2番目の問題:

返されたオブジェクトはですJo.initが、私は欲しいですJo

4

4 に答える 4

1

標準ではないものを使用する必要__proto__はありません。これを使って:

var Jo = function( selector ){
    this.init(selector);
};

Jo.prototype = {
    infos: function(){
        return "Hello! I'm Jo, I'm here to make your life easier";
    },
    init : function( selector ){
           this.selector = selector;
    },
    constructor : Jo //reset constructor, because we are using object literal which override the original prototype object
};
var jo = new Jo('jojo');
console.log(jo instanceof Jo); //return true
console.log(jo.infos());    //display the Hello....

コードでは、新しいオブジェクトを明示的に返すため、作成したインスタンスは Jo.init のインスタンスです。したがって、このインスタンスは Jo のプロトタイプにアクセスできません。

于 2013-10-08T09:31:28.067 に答える
0

私はついに私の解決策を見つけました:

(function( window, undefined ){

    var Jo = function( selector, context ){
        return new Jo.fn.init(selector, context);
    };

    Jo.fn = Jo.prototype = {
        Jo: "0.1",
        constructor: Jo,
        init: function( selector, context ){

            console.log( "$() request work" );

        }
    };

    Jo.infos = function(){

        console.log("info work");

    };

    Jo.fn.init.prototype = Jo.fn;

    if( typeof window === "object" && typeof window.document === "object" ) window.Jo = window.$ = Jo;

})( window );
于 2013-10-10T09:05:11.193 に答える
0

prototype実際のコンストラクターの を、Jo.init使用するプロトタイプ オブジェクトに設定する必要があります。Jo.infos()また、インスタンスではなく関数自体を呼び出したい場合Joは、プロトタイプではなくそこに配置する必要があります。

function Jo(selector) {
    return new Jo.init(selector);
}
Jo.init = function(selector) {
    this.selector = selector;
};
Jo.init.prototype = Jo.prototype = {
    // instance methods here
    …
}

Jo.infos = function(){
    return "Hello! I'm Jo, I'm here to make your life easier";
};

追加init機能なし:

function Jo(selector) {
    if (! (this instanceof Jo)) return new Jo(selector);

    this.selector = selector;
}
Jo.prototype = {
    // instance methods here
    …
}

Jo.infos = function(){
    return "Hello! I'm Jo, I'm here to make your life easier";
};
于 2013-10-08T10:44:58.330 に答える
-1

__proto__メソッドを解決するためにルックアップ チェーンで使用されるオブジェクトです。

prototype__proto__new でオブジェクトを作成するとき にビルドに使用されるオブジェクトです。

var Jo = function( selector ){
  return new Jo.init(selector);
};

Jo.__proto__= {                 //<---------------------  __proto__
  infos: function(){
      return "Hello! I'm Jo, I'm here to make your life easier";
  }
};

Jo.init = function( selector ){

  this.selector = selector;

};
于 2013-10-08T09:23:11.490 に答える