发现了一个讲解javascript的好网站,分享一下,讲的非常棒!
注意,这些文章都可以选择中文进行阅读!
下面这个连接是关于prototype的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Inheritance_and_the_prototype_chain
下面这个连接是关于Function的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions
这个是Object的:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object
再贴一个博客园园友的链接,也是非常值得详读的:
http://www.cnblogs.com/dolphinX/p/5565753.html
http://www.cnblogs.com/dolphinX/p/4385862.html
下面说说我的理解,
首先,使用
function Person(name){ this.name = name; this.speak = function(){ console.log('hello!'); } }
和
function Person(name){ this.name = name; } Person.prototype.speak = function(){ console.log('hello!'); }
有什么区别呢?
使用第二种方法,以后用new Person创建出来的对象的__proto__属性都会指向 同一个 Person的prototype对象,因此,在内存中只有一份speak的函数实现; 而使用 第一种方法,每个new出来的对象,都有自己独立的speak函数对象,也就是说在内存中,存在许多份相同的speak函数实现。
由此,我们可以得出这样的结论:普通属性(每个对象都可能不同),应该放在函数声明中,使得每个对象的普通属性都有独立的内存空间,不相互影响;函数属性 (每个对象应该都一样),应该放到prototype里,防止过多的内存占用,也可以达到修改一次,所有对象的对应函数都被修改的效果。
下面抄一段别人的话,看看module.exports 和 require的说明。
我们只需知道三点即可知道 exports
和 module.exports
的区别了:
exports
是指向的module.exports
的引用module.exports
初始值为一个空对象{}
,所以exports
初始值也是{}(注意,这里也是个对象,不是空指针)
require()
返回的是module.exports
而不是exports
require()
is not part of your standard JavaScript. In context to your question and tags, require()
is built into Node.js to load modules。