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

Javascript 我应该将对象属性传递给对象方法吗?,javascript,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 u

我正在努力学习面向对象的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()
然而,我了解到,在处理普通函数时,将变量传递到函数中通常是个好主意,但是在对象中,这似乎有点笨拙

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)

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

如果您希望
log
始终打印对象的URL,那么您当然不会将对象的URL作为参数传递,因为
log
可以自己获得它

如果您想记录对象的各种属性,我建议为个别情况创建单独的例程,例如
logUrl
logBlah


如果您希望
log
打印一些任意值,那么不言而喻,您需要传入该值


如果与对象相关的日志记录没有任何内容,那么您就可以有一个日志记录例程,它独立于记录您传递的对象的日志记录。

< p>您刚才提到您正试图在JavaScript中学习OOP,但实际上,如果没有用户实例,请考虑<代码>用户< /Cult>对象中的日志函数。无
log
method eigther。在C++或C语言中,这与OO的概念不一样。在我看来,
prototype
最能描述oop,请执行以下操作:

var users = function(url){
    this.url = url;
}
users.prototype.log = function(){
    console.log(this.url);
}

这样,
日志
就不会出现在
用户的任何实例中
,它存在于
\uuuuuu proto\uuuuuu
中,这是任何实例中的
原型
的参考。也就是说,当你创建实例时,它们共享所有的函数,与C++或C语言相同。最后,您不应该在帖子中使用第二个示例,这不是面向对象的东西。

在第二个示例中,您严格限制参数中的实例名(“liveUsers”),url属性需要是公共的,而在第一个示例中,它可能是私有的。将变量传递到函数中通常是个好主意??这没有多大意义。我想说第一个看起来更干净,但第二个你可以立即看到log()到底在记录什么(但这也可能是一个命名usue,logUrl会更好),从OO的角度来看,你不应该依赖你的客户机(这里的
用户
函数之外的代码)做你想做的事。如果
log
函数应该只访问类成员来完成它的工作,那么不要使用参数,而是自己获取所需的信息。您可能希望在
用户
函数中获取对该的引用,并使用该引用。ie
var self=此
并在
log
中,使用
self.url
,以防
的值在某些时候不是您期望的值。在继续之前,我建议修复分号键,它显然已损坏。