普通函数和函数对象的区别
Javascript Difference between normal function and function object
在Javascript中创建类(或对象)的方法是使用;
function MyObj()
{
this.someVar = "xyz";
this.someMethod = function(){}
}
我的简单问题是这个函数与普通JavaScript函数有何不同…假设一个函数将两个数相加?
功能没有区别。区别在于你如何称呼他们。
例如,它们具有相同的效果:
function MyObj(){
this.someVar = "xyz";
this.someMethod = function(){
console.log(this.someVar);
}
}
var obj = new MyObj();
obj.someMethod();
和
function someMethod(){
console.log(this.someVar);
}
function MyObj(){
this.someVar = "xyz";
}
var obj = new MyObj();
someMethod.call(obj);
和
function someMethod(){
console.log(this.someVar);
}
function MyObj(){
this.someVar = "xyz";
}
var obj = new MyObj();
obj.f = someMethod;
obj.f();
当您将问题标记为原型继承时,我将说构建函数的最佳方法应该是这样的:
function MyObj(){
this.someVar = "xyz";
}
MyObj.prototype.someMethod = function(){
console.log(this.someVar);
}
var obj = new MyObj();
obj.someMethod();
这样,MyObj
的所有实例共享相同的函数,因此更轻。
区别不在于函数的内容,而在于如何调用它。
如果调用var myObj = new MyObj()
,则创建一个新对象。按照惯例,像这样使用的函数以大写字母开头。
如果你要调用没有new
关键字的函数,那么完全相同的事情发生在函数内部,除了this
将是全局对象而不是新创建的对象。对于一个简单的"加2个数"函数来说,这并不重要,但如果你忘记了它,就会导致非常奇怪的bug。
确保忘记new
调用也没关系的一种方法是将其放在函数的顶部:
function MyObj() {
if (! (this instanceof MyObj)) {
return new MyObj();
}
...
}
无。重要的是new
关键字的使用。
看到:
function Fun(){
this.method = function(){
return "Bar";
}
return "Foo";
}
var value = Fun(); // assigns the return value of Fun() to value
alert(value); // "Foo"
// alert(value.method()); // won't work because "Foo".method doesn't exist
var instance = new Fun(); // assigns a new instance of Fun() to instance
alert(instance); // [object Object]
alert(instance.method()); // "Bar"
相关文章:
- JavaScript中的函数和对象之间没有区别吗?
- javascript函数的:和=之间的区别
- 函数中this和var之间的区别
- 使用大括号和不使用bracs调用函数的区别
- 缓存!saveLocations()和addLocation()函数有什么区别
- Javascript-defineProperty和直接在对象上定义函数之间的区别
- 函数()和新函数()之间的区别
- 直接绑定和使用每个函数之间的区别
- 两者之间有什么区别..函数中的参数和参数
- 调用函数和回调函数有什么区别
- JS构造函数的原型属性与其原型之间的区别
- 在函数内赋予价值和在函数外赋予价值有什么区别
- js 函数之间使用参数的区别
- 在 JavaScript 中的对象内分配柯里函数时,这和 self 之间有什么区别吗?
- 这些函数类型之间有什么区别
- javascript onchange中的代码和函数中的相同代码有什么区别
- 向构造函数或原型添加属性之间的区别
- 什么's调用函数和传递函数的区别
- jQuery递归函数调用和Javascript之间有区别吗;s setInterval
- 试图理解JavaScript中原型和构造函数之间的区别