Constructors in JavaScript objects

后端 未结 19 1717
夕颜
夕颜 2020-11-22 10:21

Can JavaScript classes/objects have constructors? How are they created?

相关标签:
19条回答
  • 2020-11-22 10:44

    They do if you use Typescript - open source from MicroSoft :-)

    class BankAccount {
     balance: number;
     constructor(initially: number) {
     this.balance = initially;
     }
     deposit(credit: number) {
     this.balance += credit;
     return this.balance;
     }
    }
    

    Typescript lets you 'fake' OO constructs that are compiled into javascript constructs. If you're starting a large project it may save you a lot of time and it just reached milestone 1.0 version.

    http://www.typescriptlang.org/Content/TypeScript%20Language%20Specification.pdf

    The above code gets 'compiled' to :

    var BankAccount = (function () {
        function BankAccount(initially) {
            this.balance = initially;
        }
        BankAccount.prototype.deposit = function (credit) {
            this.balance += credit;
            return this.balance;
        };
        return BankAccount;
    })();
    
    0 讨论(0)
  • 2020-11-22 10:45

    In most cases you have to somehow declare the property you need before you can call a method that passes in this information. If you do not have to initially set a property you can just call a method within the object like so. Probably not the most pretty way of doing this but this still works.

    var objectA = {
        color: ''; 
        callColor : function(){
            console.log(this.color);
        }
        this.callColor(); 
    }
    var newObject = new objectA(); 
    
    0 讨论(0)
  • 2020-11-22 10:46

    So what is the point of "constructor" property? Cannot figure out where it could be useful, any ideas?

    The point of the constructor property is to provide some way of pretending JavaScript has classes. One of the things you cannot usefully do is change an object's constructor after it's been created. It's complicated.

    I wrote a fairly comprehensive piece on it a few years ago: http://joost.zeekat.nl/constructors-considered-mildly-confusing.html

    0 讨论(0)
  • 2020-11-22 10:50

    Using prototypes:

    function Box(color) // Constructor
    {
        this.color = color;
    }
    
    Box.prototype.getColor = function()
    {
        return this.color;
    };
    

    Hiding "color" (somewhat resembles a private member variable):

    function Box(col)
    {
       var color = col;
    
       this.getColor = function()
       {
           return color;
       };
    }
    

    Usage:

    var blueBox = new Box("blue");
    alert(blueBox.getColor()); // will alert blue
    
    var greenBox = new Box("green");
    alert(greenBox.getColor()); // will alert green
    
    0 讨论(0)
  • 2020-11-22 10:51

    just to offer up some variety. ds.oop is a nice way to declare classes with constructors in javascript. It supports every possible type of inheritance (Including 1 type that even c# does not support) as well as Interfaces which is nice.

    var Color = ds.make.class({
        type: 'Color',
        constructor: function (r,g,b) { 
            this.r = r;                     /* now r,g, and b are available to   */
            this.g = g;                     /* other methods in the Color class  */
            this.b = b;                     
        }
    });
    var red = new Color(255,0,0);   // using the new keyword to instantiate the class
    
    0 讨论(0)
  • Here we need to notice one point in java script, it is a class-less language however,we can achieve it by using functions in java script. The most common way to achieve this we need to create a function in java script and use new keyword to create an object and use this keyword to define property and methods.Below is the example.

    // Function constructor
    
       var calculator=function(num1 ,num2){
       this.name="This is function constructor";
       this.mulFunc=function(){
          return num1*num2
       };
    
    };
    
    var objCal=new calculator(10,10);// This is a constructor in java script
    alert(objCal.mulFunc());// method call
    alert(objCal.name);// property call
    
    //Constructors With Prototypes
    
    var calculator=function(){
       this.name="Constructors With Prototypes";
    };
    
    calculator.prototype.mulFunc=function(num1 ,num2){
     return num1*num2;
    };
    var objCal=new calculator();// This is a constructor in java script
    alert(objCal.mulFunc(10,10));// method call
    alert(objCal.name); // property call
    
    0 讨论(0)
提交回复
热议问题