Kar*_*oel 34 javascript methods function
关于JS,这两者有什么区别?我知道方法与对象有关,但是混淆了函数的用途是什么?它们的语法有何不同?
另外,这两种语法之间的区别是什么:
var myFirstFunc = function(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
和
function myFirstFunc(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
另外,在使用函数之前,我在某处看到了我们需要做的事情:
obj.myFirstFunc = myFirstFunc;
obj.myFirstFunc("param");
Run Code Online (Sandbox Code Playgroud)
为什么需要第一行,它有什么作用?
对不起,如果这些是基本问题,但我开始使用JS而且很困惑.
编辑:对于最后一点代码,这就是我所说的:
// here we define our method using "this", before we even introduce bob
var setAge = function (newAge) {
this.age = newAge;
};
// now we make bob
var bob = new Object();
bob.age = 30;
// and down here we just use the method we already made
bob.setAge = setAge;
Run Code Online (Sandbox Code Playgroud)
mas*_*sta 42
回答你的标题问题''功能'和'方法'之间的区别.
这是语义,与你想要表达的内容有关.
在javascript中,每个函数都是一个对象.对象是键:值对的集合.如果值是基元(整数,字符串,布尔值)或其他对象,则该值被视为属性.如果值是函数,则称为"方法".
在对象的范围内,函数被称为该对象的方法.它是从对象命名空间'MyObj.theMethod()'调用的.由于我们说函数是一个对象,函数中的函数被认为是该函数的一种方法.你可以说我将使用我的对象的save 方法.或者你可以说,"save方法接受一个函数作为参数".但是你通常不会说函数接受一个方法作为参数.
顺便提一下Stoyan Stefanov的书Javascript Patterns 详细介绍了你的问题,如果你真的想要理解这门语言,我强烈推荐它.这是关于这个主题的书的引用.
因此,作为对象的函数A可能会发生属性和方法,其中一个恰好是另一个函数B.然后B可以接受函数C作为参数,并且在执行时可以返回另一个函数D.
小智 18
真实没有区别,但两者都有区别:
方法:方法是与对象关联的函数.
var obj = {
name : "John snow",
work : function someFun(paramA, paramB) {
// some code..
}
Run Code Online (Sandbox Code Playgroud)
功能:当没有与之关联的对象时,它就会起作用.
function fun(param1, param2){
// some code...
}
Run Code Online (Sandbox Code Playgroud)
Oli*_*eke 16
许多答案都在说,方法就是在对象上定义时调用的函数。
虽然当人们谈论 JavaScript 或一般的面向对象编程时,这个词的使用方式通常是这样的(请参阅此处),但值得注意的是,在 ES6 中,术语方法具有非常具体的含义(请参阅第14.3节方法规范的定义)。
阿法(严格意义上的)是通过在对象文本或作为在类声明/表达的一类方法的简明方法的语法定义的函数:
// In object literals:
const obj = {
method() {}
};
// In class declarations:
class MyClass {
method() {}
}
Run Code Online (Sandbox Code Playgroud)
这个答案很好地概述了方法的特殊性(严格意义上),即:
[[HomeObject]]
属性,允许它们使用super
.prototype
属性创建的,也没有内部[[Construct]]
方法,这意味着它们不能用new
.下面是一些示例,说明方法(严格意义上的)与通过函数表达式定义在对象上的函数有何不同:
// In object literals:
const obj = {
method() {}
};
// In class declarations:
class MyClass {
method() {}
}
Run Code Online (Sandbox Code Playgroud)
const obj = {
method() {
super.test; // All good!
},
ordinaryFunction: function ordinaryFunction() {
super.test; // SyntaxError: 'super' keyword unexpected here
}
};
Run Code Online (Sandbox Code Playgroud)
const obj = {
method() {},
ordinaryFunction: function ordinaryFunction() {}
};
console.log( obj.ordinaryFunction.hasOwnProperty( 'prototype' ) ); // true
console.log( obj.method.hasOwnProperty( 'prototype' ) ); // false
new obj.ordinaryFunction(); // All good !
new obj.method(); // TypeError: obj.method is not a constructor
Run Code Online (Sandbox Code Playgroud)
var myFirstFunc = function(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
和
function myFirstFunc(param) {
//Do something
};
Run Code Online (Sandbox Code Playgroud)
(几乎)相同。第二个(通常)只是简写。然而,正如这个jsfiddle(http://jsfiddle.net/cu2Sy/)所示,function myFirstFunc
一旦进入封闭范围就会导致函数被定义,而只有myFirstFunc = function
在执行到达该行时才会创建它。
至于方法,它们有一个this
参数,即当前对象,因此:
var obj = {};
obj.func = function( ) {
// here, "this" is obj
this.test = 2;
}
console.log( obj.test ); // undefined
obj.func( );
console.log( obj.test ); // 2
Run Code Online (Sandbox Code Playgroud)
您显示的确切语法是因为您也可以这样做:
function abc( ) {
this.test = 2;
}
var obj = {};
obj.func = abc;
obj.func( ); // sets obj.test to 2
Run Code Online (Sandbox Code Playgroud)
但你不应该没有充分的理由。
归档时间: |
|
查看次数: |
33318 次 |
最近记录: |