javascript对象中类似php的构造函数

时间:2014-01-03 22:01:31

标签: javascript

是否可以在javascript中创建类似php的构造函数?

我的意思是,在php中你可以这样做

<?php

class myObj
{
    public function __construct()
    {
        print "Hello world!";
    }
}

//prints "Hello world!"
new myObj();

我一直在玩JS这样的想法。这甚至可能吗?

var myObj = function()
{
    this.prototype.constructor = function()
    {
        console.log("Hello world!");
    }
}

//I'd like to execute some actions without invoking further methods
//This should write "Hello world! into the console
new myObj();

3 个答案:

答案 0 :(得分:3)

简单:

var myObj = function() {
    console.log("Hello world!");
}
new myObj();

没有单独的构造函数,这个构造函数。 myObj()new myObj()之间的差异(按要求说明(不能保证比我们的自定义比萨更好))后者将使用this做奇怪的事情。一个更复杂的例子:

var myObj = function() {
    this.myProperty = 'whadever';
}
new myObj(); //Gets an object with myProperty set to 'whadever' and __proto__(not that you should use it, use Object.getPrototypeOf()) set to 'myObj'.

它通过用this替换新对象来工作。因此它创建了一个新对象({})并看到了theNewAwesomeObject.myProperty = 'whatever'。由于没有非原始返回值,因此会自动返回theNewAwesomeObject。如果我们只是myObj(),而没有new则不会自动返回,因此它的返回值为undefined

答案 1 :(得分:0)

您可以立即调用函数:

function MyObject() {
    var _construct = function() {
        console.log("Hello from your new object!");
    }();
}

http://jsfiddle.net/aqP9x/

答案 2 :(得分:0)

我个人最喜欢的模式:

function Cat(){
   console.log("Cat!");
}
Cat.prototype.constructor = Cat;

然后像这样创建:

var foo = new Cat();