2014-06-27 110 views
-3

考虑:将原型添加到函数中意味着什么?

var x = function() { 

}; 
x.prototype = { abc: 25 }; 

有人能向我解释这是什么意思。这可以在没有.prototype的函数中完成吗?

var x = function() { 
    // something here ? 
}; 
+0

下面应该解释很多:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711原型保存内存和CPU以及使您能够使用可识别的OO模式 – HMR

+0

您可以在构造函数中执行'this.abc = 25',这大致相同。 –

回答

2

原型是多么的类模型工作在JavaScript的 - 你已经创建了一个类x具有财产abc默认为25

var obj = new x(); 
alert(obj.abc); // 25 

功能x是类的构造函数,它当该类的新实例被创建并且可以初始化它时被调用。这意味着,当然,你可以只设置abc属性有:

var x = function() 
{ 
    this.abc = 25; 
}; 
var obj = new x(); 
alert(obj.abc); // 25 

这就是所谓但是不太有效的方法:

  • 你必须处理创建,而不是设置在属性中的每个对象原型一次又一次。
  • 该属性存储在每个对象上,每次都消耗内存,而不是在原型上存储一次。

ECMAScript的和谐有nicer syntax定义类和原型,不过这个人是不是在任何浏览器中实现尚未:

class x { 
    constructor() { 
    ... 
    } 

    public abc = 25; 
} 

这相当于你的代码定义的雏形,只是将相关的操作好一点。

+0

因此,定义函数时我无法做到这一点?我需要稍后添加原型? –

+0

是的。我不会叫x类,但它是一个构造函数 –

+0

@SamanthaJ:我更新了我的答案。总结:不,你不能一次定义构造函数和原型,尽管计划中有更好的语法。是的,你可以在构造函数中定义属性,但这种方法有缺点。 –