【问题标题】:Javascript PropertiesJavascript 属性
【发布时间】:2015-11-05 10:44:37
【问题描述】:

如果问题只是愚蠢且无法回答,请告诉我?

我刚刚开始使用 javascript 进行单元测试。我一直在我的应用程序中实现this 博客代码。我只是对在 javascript 中传递给函数的名称参数感到困惑。如果我们谈论 Java、Php 或任何其他语言,它们在构造函数中接受参数,并且可以在类中使用类似

$vehicle = new Vehicle('argument here');

Class Vehicle {
    protected  $name;
    function __construct($name) {
        $this->name = $name; // we can use the property any where in the class
     }
}
//Is name Property? Object? or anything else?
//javascript
(function(name) {
    "use strict";
    function vehicle(modal) {
        this.modal = modal || 'Civic 2015'; 
    }
    name.vehicle = vehicle; //? ? ?
})(this);//also why using (this) ?

也非常欢迎举个例子。

【问题讨论】:

  • 请阅读关于 JavaScript 中 OOP 的优秀教程。 MDN 有一个可用的

标签: javascript function oop


【解决方案1】:

Javascript 没有类(真的),因此 OOP 的处理方式与您提到的某些语言略有不同。通常你会看到这样的东西:

function Vehicle(make, color){
    this.make = make;
    this.color = color;
}

Vehicle.prototype.getMake = function(){
    return this.make;
}

var myCar = new Vehicle('ford', 'green');
myCar.getMake(); //'ford'

如我制作的这个小提琴所示:https://jsfiddle.net/eqf2apwx/

不过,处理 JS 对象的方法有很多,我建议你用 google 一下,尤其是“Crockford Classless”,这是一种流行的对象处理方法。

【讨论】:

    【解决方案2】:

    您在上面使用的函数称为自执行立即函数,此类函数内部的“this”始终指向全局对象,因为内部函数被作为函数调用(即,不是作为带有 new 的构造函数)“ this" 应该始终指向全局对象。

    此模式很有用,因为它为您的初始化代码提供了一个作用域沙箱。考虑以下常见场景:当页面加载时,您的代码必须执行一些设置任务,例如附加事件处理程序、创建对象等。所有这些工作只需要完成一次,因此没有理由创建可重用的命名函数。但是代码还需要一些临时变量,你不会 初始化阶段完成后需要。将所有这些变量创建为全局变量将是一个坏主意。这就是为什么你需要一个立即函数——将你的所有代码包装在它的本地范围内,而不是在全局范围内泄漏任何变量

    然而,在 ECMAScript 5 的严格模式下,“this”引用不一定指向全局对象,因此当您的代码处于严格模式时,您必须采用不同的模式。因此,开发人员通常会从全局范围传递对“this”的引用。所以在你的情况下,作为参数传递给立即函数的“this”是对全局“window”对象的引用。此外,这种模式使代码在浏览器之外的环境中更具互操作性,因为您不需要在即时函数内部硬编码“窗口”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 2012-08-15
      • 2020-07-19
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多