属性是Javascript中的对象吗?

时间:2014-08-26 02:25:22

标签: javascript

我正在尝试理解对象和点符号属性访问器:

document.createElement('pre')createElement()属于document的属性相同,因为我使用的是点符号属性acccessor?这是否意味着属性也是对象?

在上面的示例中,点运算符执行的功能与访问属性不同,就像+运算符可以执行加法和连接一样?看起来createElementdocument的属性。

阅读以下资料后,我无法回答这个问题:
MDN Property Accessors
Dot Notation vs Bracket Notation

5 个答案:

答案 0 :(得分:2)

document对象有一个名为createElement的属性,其值为函数。

该属性本身不是对象,但在这种情况下,它包含对象(特别是函数)的引用。

请注意,您也可以使用document["createElement"]代替document.createElement,这可能会让我们更明显地谈论document的属性。

答案 1 :(得分:2)

  

是document.createElement(' pre'),就像说createElement()是文档的属性一样,因为我使用点符号属性acccessor?

  

这是否意味着属性也是对象?

他们可以。属性有一个值,可以是基元(数字,字符串,未定义等)或对象的引用(数组,对象,DOM元素,函数)。如果属性引用Function或可调用对象,则它称为具有该属性的对象的方法

所以在上面, createElement 文档对象的一种方法。

  

在上面的例子中,点运算符是否执行与访问属性不同的函数,就像+运算符可以执行加法和连接一样?

没有。 Dot属性访问器是一种便利,只能在属性名称是有效标识符的情况下使用,例如,必须对名称为 foo-bar 的属性使用方括号表示法,因为带连字符的名称不是有效标识符,但可以用作属性名称:

var obj = {'foo-bar': 'fum'}; 

方括号表示法还允许使用变量作为属性名称:

var propName = 'foo-bar';
var obj = {};
obj[propName] = 'fum';
console.log(obj['foo-bar']); // 'fum'
  

看起来createElement是document的属性。

确实如此,这是件好事。 : - )

答案 2 :(得分:0)

document是一个对象。 createElement是此对象的一种方法。 在JS中,如果它以(...)结尾,它是一个方法/函数或构造,如if(...)

因为JS方法/函数也是对象,所以是的,你可以说createElement是一个指向对象的属性。

答案 3 :(得分:0)

在javascript对象"属性"可以是:

  • 原始类型(字符串,数字)
  • 功能
  • 物件
  • 阵列

当一个对象的属性是一个函数时,它被称为该对象的METHOD。

在你的例子中,你可以"可以"写一个点符号,如: document.createElement;(这将返回METHOD本身)。

键入时: document.createElement('tagName');它调用文档的createElement METHOD,参数值为" tagName"。

基本上,在这两种情况下,你都是"访问对象的属性",但在第二种情况下(带括号和参数)你还要调用该属性。

现在回答您的具体问题:

  1. 是的,对象属性也可以是对象。
  2. 不,点运算符只能访问该对象的METHOD(createElement是文档OBJECT的METHOD)。
  3. 是的,createElement是文档对象的一个​​属性,但该属性是一个函数,我们将其称为文档对象的METHOD。
  4. 我知道我经常重复自己,但我试着总结一下你问题的本质。 如果您需要更多信息,请不要犹豫。

答案 4 :(得分:0)

你会陷入语义困境。老实说,我开始写一本近乎小说作为答案,但我决定让它更简洁。

在JavaScript中,不要将objects视为由propertiesmethods组成。它会让你感到困惑,因为在JS中定义差异更难。

objects视为由key-value pairs组成。 key只是value的简写名称。 value可以是:

  • 一个数字
  • 布尔值
  • 一个字符串
  • 数组
  • 功能
  • 另一个对象
  • 表达

AKA,值可以只是任何。这就是为什么当你开始标记javascript对象的propertiesmethods时,它会变得非常混乱。相信我,只要考虑一下keyvalue,你就会为自己省事。


回答你原来的问题:

property 可以object,但不必。{/ p>

语义分解:

  • document对象的property名为createElement
  • createElement的值为function,因此createElementmethod
  • 在JavaScript中,function实际上是object的特殊类型。

因此,当我们将所有内容放在一起时,createElementpropertymethodobject。了解为什么key-value pairs更容易概念化? ;)