2

オブジェクトを数えることはできますか? お気に入り:

 var student1 = new Student();
student1.name("ziv");
student1.age();
student1.where("a");


 var student2 = new Student();
student2.name("dani");
student2.age();
student2.where("b");

 var student3 = new Student();
student3.name("bari");
student3.age();
student3.where("c");

それらをカウントして 3 を返す関数。

ありがとう :)

4

4 に答える 4

2

インスタンスを数えることを意味していると思います。たとえば、配列を使用して、インスタンスを追跡する必要があります

var students = [];
var student1 = new Student()
   ,student2 = new Student();
students.push(students1,students2);
/* later ... */
var nOfStudents = students.length; //=> 2

Student別のアイデアは、プロトタイプにカウンターを追加することです。

Student.prototype.instanceCnt = 0;

そして、インスタンスごとに Student コンストラクターでそれをインクリメントします

   //in the Student constructor function
   function Student(){
     this.instanceCnt += 1;
     /* ... */
   }
   // usage example
   var student1 = new Student()
      ,student2 = new Student()
      ,students = student1.instanceCnt; //=> 2
于 2012-12-25T09:23:36.913 に答える
1

いいえ、手動でコンストラクターにカウンターを追加するStudentか、各インスタンスを配列に追加してその配列の長さを取得する必要があります。

例:

var counter;
function Student() {
    counter++; // this will increase every time Student is initialized
    // continue the constructor...
}

または:

var students = [];
function Student() {
    students.push(this); // this will hold the instance in an array
    // continue the constructor...
}
console.log(students.length);
于 2012-12-25T09:12:37.820 に答える
1

Javascript には静的という概念はありませんが、クロージャを使用してその機能をエミュレートできます。

(function(){

  var numberOfInstances = 0;

  var Student = function(studentName){
    var name = '';

    var _init(){
      name = studentName ? studentName : 'No Name Provided';
      numberOfInstances++;    
    }();

    this.getName = function(){
       return name;
    }; 

    this.getNumberOfInstances = function(){
      return numberOfInstances;
    };

    return this;
  };
})(); 

var student1 = new Student("steve");
var student2 = new Student("sally");
console.log("my name is " + student1.getName());
console.log("my name is " + student2.getName());
console.log("number of students => " + student1.getNumberOfInstances());  
console.log("number of students => " + student2.getNumberOfInstances());  
于 2012-12-25T09:15:10.380 に答える
0

配列内のインスタンスを追跡する単純な汎用インスタンス化/継承ヘルパーを作成できます

このような何かがそれを行うかもしれません

var base = (function baseConstructor() {

  var obj = {
    create:function instantiation() {
        if(this != base) {
        var instance = Object.create(this.pub);
         this.init.apply(instance,arguments);
         this.instances.push(instance);
        return instance;
        } else {
          throw new Error("You can't create instances of base");
        }
    },
    inherit:function inheritation() {
      var sub = Object.create(this);
      sub.pub = Object.create(this.pub);
      sub.sup = this;
      return sub;
    },
    initclosure:function initiation() {},
    instances: [],
    pub: {}

  };



  Object.defineProperty(obj,"init",{
   set:function (fn) {
     if (typeof fn != "function")
       throw new Error("init has to be a function");
     if (!this.hasOwnProperty("initclosure"))      
       this.initclosure = fn;
    },
    get:function () {
        var that = this;
        //console.log(that)
            return function() {
              if(that.pub.isPrototypeOf(this)) //!(obj.isPrototypeOf(this) || that == this))
                that.initclosure.apply(this,arguments);
              else
                throw new Error("init can't be called directly"); 
             };
    }    

  });


  Object.defineProperty(obj,"create",{configurable:false,writable:false});
    Object.defineProperty(obj,"inherit",{configurable:false,writable:false});
  return obj;
})();

var Student = base.inherit()
    Student.init = function (age) {
    this.age = age;    
    }

var student1 = Student.create(21)
var student2 = Student.create(19)
var student3 = Student.create(24)

    console.log(Student.instances.length) // 3

JSBinの例を次に示します。

于 2012-12-25T10:08:41.310 に答える