-1

可能重复:
Javascript 对象中的构造函数

我正在尝试学习如何在 javascript 中创建类。我发现这对我来说很难理解。

现在,我想知道是否可以在 javascript 中创建一个构造函数,就像我们可以在 c# 或其他编程语言中那样。

我尝试了几件事:

方式1:

    function SiteProfile(_url) {
    this.url = "";
    this.name = this.ExtractNameFromURL();
}

    SiteProfile.prototype.ExtractNameFromURL = function () {
        var firstDOT = this.url.indexOf(".");
        var secondDOT = this.url.indexOf(".", firstDOT + 1);
        var theName = "";
        for (var i = firstDOT + 1; i < secondDOT; i++) {
            theName += this.url[i];
        }
        return theName;
}

方式2:

function Site() {

    this.url = "";
    this.name = "";

    this.Site = function (_url) {
        this.url = _url;
        this.name = this.ExtractNameFromURL();
    }

    this.ExtractNameFromURL = function () {
        var firstDOT = this.url.indexOf(".");
        var secondDOT = this.url.indexOf(".", firstDOT + 1);
        var theName = "";
        for (var i = firstDOT + 1; i < secondDOT; i++) {
            theName += this.url[i];
        }
        return theName;
    }
}

两个班级都应该使用一个 URL,并且只需从他那里获取名称,而不需要 www。或 .com

我想知道我是否可以设计一个类,我可以像这样创建一个实例:

 var site = new SiteProfile("www.google.co.il");
 document.write(site.name); // becuse, this do nothing

(对不起我的英语不好)

4

2 回答 2

2

你真的很亲近。您的第一个表单的问题只是您没有url使用参数设置属性_url

function SiteProfile(_url) {
    //change the line below to:
    //this.url = _url;
    this.url = "";
    this.name = this.ExtractNameFromURL();
}

SiteProfile.prototype.ExtractNameFromURL = function() {
    var firstDOT = this.url.indexOf(".");
    var secondDOT = this.url.indexOf(".", firstDOT + 1);
    var theName = "";
    for (var i = firstDOT + 1; i < secondDOT; i++) {
        theName += this.url[i];
    }
    return theName;
}
var site = new SiteProfile("www.google.co.il");
document.write(site.name); // with the change above, this will behave as expected

这是第一种形式的小提琴:http: //jsfiddle.net/BCnfx/

第二种形式的问题是双重的。如果您仍想这样实例化主函数,则应将其称为“SiteProfile”。第二个问题是您需要url通过将url传递给Site方法来初始化属性。

//function below should be called "SiteProfile", not "Site"
function Site() {
    this.url = "";
    this.name = "";

    this.Site = function(_url) {
        this.url = _url;
        this.name = this.ExtractNameFromURL();
    };

    this.ExtractNameFromURL = function() {
        var firstDOT = this.url.indexOf(".");
        var secondDOT = this.url.indexOf(".", firstDOT + 1);
        var theName = "";
        for (var i = firstDOT + 1; i < secondDOT; i++) {
            theName += this.url[i];
        }
        return theName;
    };
}

//now instantiate like this instead.
var site = new SiteProfile();
site.Site("www.google.co.il");
document.write(site.name); // with the changes above, this will behave as expected

这是第二种形式的小提琴:http: //jsfiddle.net/BCnfx/1/

于 2012-10-08T13:51:09.503 回答
1

在你的第一个例子中:

function SiteProfile(_url) {
    this.url = _url;
    this.name = this.ExtractNameFromURL();
}

那么你将能够做到:

var site = new SiteProfile("www.google.co.il");
 document.write(site.name);
于 2012-10-08T13:48:46.913 回答