【问题标题】:Difference in calling method on object or passing object as function argument在对象上调用方法或将对象作为函数参数传递的区别
【发布时间】:2013-10-06 20:20:58
【问题描述】:

在对象上调用方法或将对象作为函数参数传递有什么区别,因此我如何在方法调用中传递参数?简单地将占位符作为参数并没有产生预期的效果。我是否必须遍历所有属性名称(不是值),然后将给定参数(作为属性名称)与对象中的真实属性名称进行比较?

这是一段注释很多的代码,因为我很好奇到底发生了什么。

// create object constructor 
function Foo(prop1, prop2) {
    this.prop1 = prop1;
    this.prop2 = prop2;
    // create object method PrintObjectPropertyM 
    // and retreive property value
    // * there is M at the end of property to distinguish 
    // method/function name

    // how can I add placeholder/argument in method and then
    // call method on object with provided argument (here prop1 or prop2)
    this.printObjectPropertyM = function() {
        console.log(this.prop1);
    };
}

// instantiate new object Bar of Foo type
var Bar = new Foo("prop1val", "prop2val");

// create function which print object property and take object as an argument
var printObjectProperty = function(object) {
    console.log(object.prop1);
};

// call printObjectProperty with Bar object as an argument
printObjectProperty(Bar); // logs prop1var in console

// call Bar method printObjectPropertyM
Bar.printObjectPropertyM(); // logs prop1val in console

如果我的 cmets、代码或伪代码有问题,请善待并纠正我。

【问题讨论】:

  • 我知道方法是对象上或类内部的函数,并且函数是独立的。
  • 你能告诉我们你想作为参数传递什么以及期望的结果是什么吗?
  • 您期望看到的结果。您的代码是正确的,并且可以正常运行。
  • @Bergi Exatcly Artyom Neustroev 发布的已接受答案。在方法中传递属性名称作为参数,而不是检查是否存在(hasOwnProperty - 我想遍历所有属性,我很傻),然后返回/记录该属性的值。
  • @Krasimir 在代码中查看 cmets,我得到了我想要的结果。附言我是不是用了太多的 cmets?

标签: javascript function oop methods


【解决方案1】:

解决方案

您应该使用[] 表示法通过其名称访问对象的属性。

在构造函数中创建一个方法:

function Foo(prop1val, prop2val) {
   this.prop1 = prop1val;
   this.prop2 = prop2val;
   this.PrintProperty = function (name) {
      if (this.hasOwnProperty(name)) {
         console.log(this[name]);
      }
   }
}

现在叫它:

var bar = new Foo("prop1val", "prop2val");
bar.PrintProperty("prop1");

链接

  1. Property Accessors - JavaScript | MDN
  2. hasOwnProperty - JavaScript | MDN

【讨论】:

  • @Artyom Neustroev 这正是我一直在寻找的。检查上面的 cmets。现在我知道在 JS 中调用“类”之外的方法或函数的区别了。
猜你喜欢
  • 2020-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 2012-05-30
  • 1970-01-01
  • 1970-01-01
  • 2020-09-13
相关资源
最近更新 更多