Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/427.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更新Javascript类属性_Javascript_Jquery - Fatal编程技术网

更新Javascript类属性

更新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属性的范围有关 每当我在控

所以我有一个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
属性的范围有关

每当我在控制台上记录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()