Javascript 在以面向对象的方式实现我的应用程序时遇到问题
我编写JS已经有一段时间了,但我从未做过任何面向对象的事情。我通常只是在顶部定义所有变量,然后全部使用。我不断听到使用OO的声音,但现在我不能做我想做的事,也得不到任何帮助 这是一把小提琴,还有半相同的代码: 因此,执行App.options.baseDomain(或this.options.baseDomain)对我不起作用。如果不能基于应用程序级变量定义其他应用程序级值,那么定义应用程序级变量有什么用处?我知道这是一个模糊的问题,但我真的不知道我在问什么。。。我只是有一个问题,在我掌握Javascript OO模式的知识后,我很难用一堆不仅包含设置,而且包含应用程序中的状态的变量来轻松完成。。。。 编辑:好的,这就是我想要做的:Javascript 在以面向对象的方式实现我的应用程序时遇到问题,javascript,Javascript,我编写JS已经有一段时间了,但我从未做过任何面向对象的事情。我通常只是在顶部定义所有变量,然后全部使用。我不断听到使用OO的声音,但现在我不能做我想做的事,也得不到任何帮助 这是一把小提琴,还有半相同的代码: 因此,执行App.options.baseDomain(或this.options.baseDomain)对我不起作用。如果不能基于应用程序级变量定义其他应用程序级值,那么定义应用程序级变量有什么用处?我知道这是一个模糊的问题,但我真的不知道我在问什么。。。我只是有一个问题,在我掌握Ja
但是我没有意识到它的局限性。。。因此,我需要一种方法来解决这个问题,它尽可能地贴近和优雅地实现这个实现。您可以将您的方法想象为创建一个名为App的“实例”对象 这里有一个稍微不同的方法
function App () {
// Save a reference to the object
var that = this;
that.options = {
baseDomain: "google.com",
apiVersion: "/api/v1"
};
that.state = {
current: that.options.baseDomain + that.options.apiVersion
};
}
var myApp = new App();
// Write the current state to the screen
document.write(myApp.state.current);
以下是JSFIDLE:
希望这有帮助 您可以执行以下操作(在JavaScript中,函数是对象):
你的问题很笼统;你应该更具体地说明你想要完成什么 除此之外,请阅读有关对象的文档 取自 使用JavaScript,您可以定义和创建自己的对象 创建新对象有两种不同的方法:
1. Define and create a direct instance of an object.
2. Use a function to define an object, then create new object instances.
方式1:
personObj=new Object();
personObj.firstname="John";
personObj.lastname="Doe";
personObj.age=50;
personObj.eyecolor="blue";
方式2:
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name) {
this.lastname=name;
}
}
JavaScript是一种解释语言。这意味着您的代码从内到外求值,或者最内部的表达式求值并传递给下一个外部表达式 在您的示例中,
options
get的值首先计算,然后是state
的值。问题在于,在对App
的关联数组进行完全计算之前,您无法访问该数组,而在对state
的值进行计算时,情况并非如此
已编辑
抱歉没有正确回答。以下是您的第二份报告中的一个改进方法:
var App = {
options: {
/* ------------------------------------
Options (PREFERABLY DONT CHANGE)
--------------------------------------- */
baseDomain : 'google.com',
apiVersion : '/api/v1',
blah: ''
},
blah: function(){
return App.options.baseDomain + App.options.apiVersion;
}
}
console.log(App.blah());
你们没有一个人回答我的问题。。。。我想了一下。。。我可以在文本中使用命名函数来访问它。。。如果我需要(不需要),我甚至可以将其分配回options对象
使用对象的深度嵌套属性并不能使您的代码面向对象。。。想象一下App.options.baseDomain就是这个.options.baseDomain。。并且是一个构造函数。要做到这一点,我需要解决这个问题,否则它对我来说毫无意义。检查我的原始问题,了解我正在尝试做什么。现在我不能再这样做了。选项。baseDomain就像我在评论中说的那样。。。对不起,请检查我添加到问题中的图像以进一步澄清。如果可能的话,我希望仍然使用对象。。。查看我的问题以了解最新的详细信息。我想是的,但我想知道另一种选择。
function person(firstname,lastname,age,eyecolor)
{
this.firstname=firstname;
this.lastname=lastname;
this.age=age;
this.eyecolor=eyecolor;
this.changeName=changeName;
function changeName(name) {
this.lastname=name;
}
}
var App = {
options: {
/* ------------------------------------
Options (PREFERABLY DONT CHANGE)
--------------------------------------- */
baseDomain : 'google.com',
apiVersion : '/api/v1',
blah: ''
},
blah: function(){
return App.options.baseDomain + App.options.apiVersion;
}
}
console.log(App.blah());
var App = {
options: {
/* ------------------------------------
Options (PREFERABLY DONT CHANGE)
--------------------------------------- */
baseDomain : 'google.com',
apiVersion : '/api/v1',
blah: ''
},
state: function(){
this.options.blah = this.options.baseDomain + this.options.apiVersion;
}
}
App.state();
console.log(App.options.blah);