在这个例子中,下面是函数或方法吗?我认为这是一个方法,因为它与img对象相关联。 任何人都可以澄清这个吗?
img.onload = function () {
ctx.drawImage(img, 10, 10);
ctx.drawImage(img, 170, 90);
ctx.drawImage(img, 170, 170);
};
非常感谢, P
答案 0 :(得分:4)
JavaScript中的“方法”只是引用函数的对象的属性。来自the specification:
方式强>
作为属性值的函数
所以从这个意义上说,你所展示的是“方法”和“功能”。
从另一个意义上说,如果将“方法”定义为“一个专门绑定给定对象或对象类的函数”,JavaScript根本就没有方法(但继续阅读)。 (关于我在博客上的更多信息:Mythical methods。)
例如,你可以考虑slice
Array
个对象的方法,但它可以用在你喜欢的任何其他对象上(只要该对象是 array-like ,因为否则slice
不知道该怎么做):
var o = {
0: "zero",
1: "one",
2: "two",
length: 3,
slice: Array.prototype.slice
};
console.log(o.slice(1));
也就是说,如果用this
调用它们没有引用他们期望的对象类型(例如,Number#toString
),某些函数将失败并显示错误,这在某种意义上说它们是真正的方法。
在任何情况下,确实使用术语“方法”来引用涉及函数的属性。事实上,the specification在讨论这样的事情时会这样做:
// ES2015+
let obj = {
method() {
}
};
和此:
// ES2015+
class Foo {
method() {
}
}
答案 1 :(得分:0)
如果没有正式的语言特定定义,则应始终遵循常用的隐含含义。
在计算机编程中;
但是如果有一种正式明确定义的语言,则应该使用它。
Javascript&#39> 功能和方法
Javascript "ECMAScript 6"正式将术语功能定义为。
... function 是一个可调用的对象。
和方法为
通过属性与对象关联的函数称为方法。
参考ecma-262 7.0, Ecmascript Overview
因为我一直使用功能而感到很糟糕,现在必须将我的所有文件修改为正确的术语。
<强>矛盾强>
它还会在用于描述和记录javascript代码的词法语法方面产生矛盾。
所有可调用的函数/方法都是Function
个对象,并且具有Function.prototype
。严格来说,在描述变量引用(或匿名)的内容时,只有函数。
例如考虑
var poo = function(){}; // Method window.poo, function poo.
function Foo(){ // this is a function?
var tic = function(){}; // tic is a function
this.Bar = function(){ // this is a function as well as a method
this.poo = poo; // This is a method, it is also function
}
this.Boo = function(){
this.poo = function(){ return poo}; // anon function returns the poo
// to create the method Boo.poo
}
}
Top
是一个函数,因为它是一个可调用对象。但它也是顶级范围window
(或上下文顶级范围)的属性,因此是window
的方法。
因此,根据Javascript标准Foo
定义,Bar
和Boo
是函数,同时方法 。编程中的这种模糊性可能是一个可能导致错误的问题,或者如果像我这样的迂腐程序员被迫遵守设计规范则会更糟糕的设计评论。
建议词法使用&#34;方法&#34;和&#34;功能&#34;
我个人会选择使用以下词语 function 和 method 。
从上面的代码。
Foo
,Bar
,Boo
和poo
是功能 Foo
是window
的方法。Bar
是Foo
&#39> 方法。Bar
&#39> 方法 poo
什么都不做Boo.poo
是一种方法。poo
是函数,即它的类型。poo
是window
,Bar
和Boo
* tic
的方法。Bar.poo
在函数中声明 Bar
Bar.poo
被定义为匿名函数 Bar.poo
是功能的参考 Boo.poo
是对方法 window.poo
* 因为poo
是属性的对象存在歧义,将其称为函数
对方法所属对象的依据可以是上下文显式引用。
drawImage
和clearRect
是其两种方法。 或在上下文中隐式引用
drawImage
和fillRect
可用于覆盖所有像素。 Getters和setter是功能。它们是对象的方法,它们是属性,但在引用声明和定义语句列表时应该只被称为 functions 。或者只是对象的属性。调用它们方法意味着函数调用语法name()
匿名函数不能是方法,因为无法通过命名属性访问它们。
回答OP
onload
是Image
的属性。它永远不是Image
Image
的对象将具有方法 onload
(如果已定义),在加载图像时调用。如果未定义方法 onload
,则在加载图像时不会发生任何事情。img.onload
是方法。或onload
是img
的方法。仅在为其分配了功能后才为真drawImage
是函数,即它的类型。ctx.drawImage
是方法。drawImage
是ctx
&#39> 方法,它是CanvasRenderingContext2D
的方法 答案 2 :(得分:-1)
我倾向于说Javascript中的每个函数都是一种方法。但我不确定这是否合理。如果我错了,请纠正我。
因此,一个方法有一个&#34;这个&#34;,这是受影响的对象。
在你的例子中这是= img
img.onload = function () {
console.log(this);
...
}
好吧,任何功能都有&#34;窗口&#34; as&#34; this&#34 ;,除非它还有别的东西。