更新Javascript类属性
所以我有一个JS类,它有很多属性。上面看起来像那样更新Javascript类属性,javascript,jquery,Javascript,Jquery,所以我有一个JS类,它有很多属性。上面看起来像那样 var myProp = function() { this.name = name; this.gender = gender; this.age = age; } console.log(myProp) onClick我的元素,我正在尝试更新myProp中的属性,因此如果我更新了console.log()我将得到name='John',gender='male'等等 这是否与我无法更新我的myProp属性的范围有关 每当我在控
var myProp = function() {
this.name = name;
this.gender = gender;
this.age = age;
}
console.log(myProp)代码>
onClick
我的元素,我正在尝试更新myProp中的属性,因此如果我更新了console.log()
我将得到name='John'
,gender='male'
等等
这是否与我无法更新我的myProp
属性的范围有关
每当我在控制台上记录myProp时,我都会返回myProp,在不更新任何属性的情况下它到底是什么样子
还在学习,如果这看起来很愚蠢,我会道歉。
谢谢。假设我正确理解了您的问题,您可以修改myProp
实例的属性值:
$('#nav li').on('click', function() {
var selected_li = $(this);
function getProp() {
myProp = function() {
return this.name + 'John' + this.gender + 'Male' + this.age + 'Nine';
}
}
});
请注意,我正在将值传递到myProp
构造函数中。。。您可能需要更新该构造函数以基于以下内容设置实例属性:
// Create an instance of myProp
var myPropInstance = new myProp('name', 'gender', 'age');
$('#nav li').on('click', function() {
var selected_li = $(this);
// Update the property values of an instance of myProp
myPropInstance.name = 'new name';
});
这是您的构造函数。这是制造物体的蓝图
var myProp = function(name, gender, age) {
this.name = name;
this.gender = gender;
this.age = age;
}
创造一个人
function Person(name, gender, age) {
this.name = name;
this.gender = gender;
this.age = age;
}
改变约翰的性别:
var John = new Person("John", "Male", "Nine");
在第一个代码块中,似乎有一些全局JS将全局变量(myProp
)设置为函数
在第二个代码块中,您有一个事件处理程序,它定义了一个名为myProp
的局部作用域函数声明
该函数在调用事件处理程序的生命周期内屏蔽全局函数
您从不调用本地范围的myProp
,但如果调用,它会立即用不同的函数(用函数表达式定义)覆盖自身
你从来没有接触过全局的myProp
,也从来没有对本地的做过任何事情
看起来您只想拥有一个具有某些属性的全局对象。如果要更改这些属性的值,请执行以下操作:
John.gender = "Female"
像这样创建getter和setter
然后使用new获得它的方法
您正在用另一个函数覆盖构造函数。看起来您还认为属性分配可以通过连接字符串来实现。这里除了建议您更好地掌握该语言之外,我们无能为力。您必须为该语言创建getter和setterthat@Fr我很抱歉我的不好,我想我误解了某些方面。下面的答案回答了我的问题:如果你想学习面向对象javascript的原理,我推荐这本书。我也写过JS继承的工作原理,你可能会发现它很有用:谢谢!我用了错误的方法,错误地抽象了示例代码。但基本上是的,我想要一个具有属性的全局类,然后一旦一个onClick
事件触发,它就会用我单击的属性更新全局类(无论我通过什么)。谢谢你的帮助这是我最喜欢的答案。它避免了对构造函数的需求,我个人和我认识的很多JS开发人员都不喜欢构造函数,因为它可能会出现性能问题。使用简单对象非常适合这种情况。此外,问题和解决方案也得到了很好的解释,我个人认为这有点绕道而行。在我看来,使用昆汀回答中的简单对象更合适;)除此之外,我真的不喜欢在JS:D中使用getter和setter
var myProp = {
name: name,
gender: gender,
age: age,
}
$('#nav li').on('click', function() {
myProp.name = "John";
myProp.gender = "Male";
myProp.age = "Nine";
});
var myProp = function() {
this.name = "k"
var self = this
this.setName =function(name){
self.name = name
}
this.getName =function(){
return self.name
}
}
var myObject = new myProp();
myObject.getName()
myObject.setName("new name")
myObject.getName()