你不知道的JS系列 ( 31 ) - 对象属性( 属性和方法 )

如果访问的对象属性是一个函数,通常被称为‘方法’,把‘属性访问’说成了‘方法访问’。从技术角度来说,函数永远不会‘属于’一个对象,把对象内部引用的函数称为‘方法’似乎有些不妥。函数和对象的关系最多也只能说是间接关系

 

属性访问返回的函数和其他函数没有任何区别,除了可能发生的隐式绑定 this
function foo() {
  console.log('foo');
}
var someFoo = foo; // 对 foo 对变量引用
var myObject = {
  someFoo: foo
}
foo; // funciton foo() {...}
someFoo; // funciton foo() {...}
myObject.someFoo; // funciton foo() {...}

 

 

someFoo 和 myObject.someFoo 只是对于同一个函数对不同引用,并不能说明这个函数是特别的或者‘属于’某个对象。如果 foo() 定义时在内部有一个 this 引用,那这两个函数引用唯一区别就是 myObject.someFoo 中的 this 会被隐式绑定到一个对象。无论哪种引用形式都不能称之为‘方法’。

 

即使在对象的文字形式中声明一个函数表达式,这个函数也不会‘属于’这个对象
var myObject = {
  foo: function () {
    console.log('foo');
  }
}
var someFoo = myObject.foo;
someFoo; // funciton foo() {...}
myObject.someFoo; // funciton foo() {...}

 

posted @ 2020-03-19 06:24  wzndkj  阅读(268)  评论(0编辑  收藏  举报