Javascript 中的这两个语句有区别吗?
function p() {
this.do = function(){alert('cool')};
}
和这个?:
function p(){};
p.prototype.do = function(){alert('cool')};
还有一件事,你为什么不能这样做:
function p(){};
p.do = function(){alert('cool')};
太感谢了!
Javascript 中的这两个语句有区别吗?
function p() {
this.do = function(){alert('cool')};
}
和这个?:
function p(){};
p.prototype.do = function(){alert('cool')};
还有一件事,你为什么不能这样做:
function p(){};
p.do = function(){alert('cool')};
太感谢了!
给定您的前两个示例,假设您p()
作为构造函数调用:
但是第一个例子...
new p()
p()
构造函数中的局部变量和参数// p.prototype = {}
new p(); // { do:function(){alert('cool')}; } ------^
new p(); // { do:function(){alert('cool')}; } ------^
new p(); // { do:function(){alert('cool')}; } ------^
第二个例子......
new p()
//p.prototype = {do:function(){alert('cool')};}
new p(); // {} ------^
new p(); // {} ------^
new p(); // {} ------^
第三个示例不起作用,因为在 JavaScript 中,函数是一个对象,因此您所做的只是在该对象上放置一个新属性。它对该函数的调用没有影响。
从功能上讲,它们是相同的。
第一个为每个对象定义了一个函数,var o = new p()
因此从内存的角度来看它不是最佳的。
您可以做您在第三个示例中展示的内容,但您不会完成您的想法:
function p(){};
p.do = function(){alert('cool')};
p.do(); // this will work
var o = new p(); // This won't have the 'do' function because that's not how it works in javascript.