javascript - 创建对象的正确方法

标签 javascript object coding-style

创建对象(及其“命名空间”等)的正确方法是什么?

1

//Company object
var Microsoft = {};

//Create an employee
Microsoft.employee = function(name) {
   this.name = name;
}

2

//Company object
Apple = {

   employee: function(name) {
      this.name = name;
   }

}

或者另一种方式?拍摄。

阅读有关原型(prototype)等的内容。正确的做法是什么?优点和缺点?

最佳答案

首先,您忘记了 Applevar。但除此之外,这些基本上是相同的事情。

其次,在我的示例中,我不会使用属性 name,因为在处理函数时,name 默认情况下是空字符串。至少在 Node.js 和 Chrome 中是这样。所以我将使用 empName 来代替。

Microsoft 示例中,您将创建一个空对象,然后在事后向其添加属性。

Apple 示例中,您将立即使用该属性创建一个对象。

这实际上就是对您来说最有意义并且您更喜欢的。因为它们或多或少是等价的。

现在,这与原型(prototype)无关。以下是您所做操作的示例:

var Apple = { 
    employee: function(empName) {
        this.empName = empName;
    }
};

Apple.employee('Hank');
Apple.empName; // 'Hank'

以下是如何通过实例执行此操作(使用 new 运算符和 prototype)

var Apple = function() {}; // base 'parent'

Apple.prototype.employee = function(empName) {
    this.empName = empName
};

var a = new Apple();
a.employee('Hank');
a.empName; // 'Hank'
Apple.empName; // undefined

因此,prototype 用于向对象的新实例添加属性(宽松地使用“对象”)。请注意,要在 Apple 中访问 employee,在第二个示例中,您必须执行类似的操作

Apple.prototype.employee('Hank'); // doesn't really do much
Apple.empName; // undefined

// but you can call the employee prototype with a bound variable
// you'd do this if you don't want to make an instance of Apple
// but still want to use one of it's prototypes
var obj = {};
Apple.prototype.employee.call(obj, 'Hank');
obj.empName; // 'Hank'

// a practical use of accessing a prototype method is
// when wanting to convert a function's arguments
// to an array. function arguments are like an array,
// but until turned into one they are not completely the same
var func = function() {
    var args = Array.prototype.slice.call(arguments);
    var sum = 0;
    for(var i = 0, l = args.length; i < l; i++) {
        sum += args[i];
    }
    return sum;
};

func(1); // 1
func(1, 2, 3, 4, 5); // 15

希望有帮助。

编辑:此外,不要对对象进行原型(prototype)设计(例如 {}Object)。这样做并不安全。由于本质上 JavaScript 中的每个变量都是一个对象,因此您添加到其中的任何原型(prototype)都将在所有变量上可用。因此,如果您执行了 Object.prototype.xyz = 12,然后执行了 var obj = { a: 1, b: 2, c: 3},然后尝试 (obj 中的 var key) { console.log(key); } 您将生成以下日志:abcxyz .. .这是你不想要的。

关于javascript - 创建对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9232135/

相关文章:

delphi - 如何在Delphi XE7中获得变体点后的功能和属性建议?

javascript - 在 JavaScript 中,链式赋值可以吗?

c++ - 惯用 std::auto_ptr 还是只使用 shared_ptr?

Javascript - 嵌套数组和唯一 ID

java - 将空括号分配给 String 引用变量

javascript - 如何等待 __doPostBack 方法在 javascript 中完成?

javascript - 单击链接两次

php - 可以使用 PHP 短标签吗?

javascript - 如何使用 d3.js 计算给定 x 的 y 值

javascript - WebStorm 11.0.4 存在调试问题。它给出了一个已弃用的警告,指出 node --debug 和 node --debug-brk 无效