我应该将对象属性传递给对象方法吗?

Him*_*ors 8 javascript

我正在尝试学习面向对象的javascript.使用一种简单的方法,我想这样做:

var users = function(url){
    this.url = url;
    this.log = function(){
        console.log(this.url);
    }
}
var apiPoint = "https://www.zenconomy.se/api/admin/tracking?format=json"
var liveUsers = new users(apiPoint)
liveUsers.log()
Run Code Online (Sandbox Code Playgroud)

但是,我已经了解到,在使用普通函数时将变量传递给函数通常是一个好主意,但在对象中,这看起来有点笨拙.

var users = function(url){
    this.url = url;
    this.log = function(url){
        console.log(url);
    }
}
var apiPoint = "here is my url"
var liveUsers = new users(apiPoint)
liveUsers.log(liveUsers.url)
Run Code Online (Sandbox Code Playgroud)

两种方法都有效.假设users.log只需要来自users-class内部的属性,那么不同方法的优缺点是什么.

Mik*_*ike 1

你刚才提到你正在尝试用javascript学习OOP,但实际上,考虑你的user对象中的日志函数,如果没有用户实例,也没有log方法。根据 C++ 或 C# 中的 OO,这不是同一概念。在我看来,prototype最好的描述 oop 的方法如下:

var users = function(url){
    this.url = url;
}
users.prototype.log = function(){
    console.log(this.url);
}
Run Code Online (Sandbox Code Playgroud)

这样,log就不会存在于 的任何实例中users,它存在于的任何实例中__proto__的引用中prototype。这意味着当您创建实例时,它们共享所有功能,与 C++ 或 C# 相同。最后,你不应该在你的帖子中使用第二个示例,这不是面向对象的事情。