我正在尝试理解对象和点符号属性访问器:
document.createElement('pre')
与createElement()
属于document
的属性相同,因为我使用的是点符号属性acccessor?这是否意味着属性也是对象?
在上面的示例中,点运算符执行的功能与访问属性不同,就像+
运算符可以执行加法和连接一样?看起来createElement
是document
的属性。
阅读以下资料后,我无法回答这个问题:
MDN Property Accessors
Dot Notation vs Bracket Notation
答案 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"。
基本上,在这两种情况下,你都是"访问对象的属性",但在第二种情况下(带括号和参数)你还要调用该属性。
现在回答您的具体问题:
我知道我经常重复自己,但我试着总结一下你问题的本质。 如果您需要更多信息,请不要犹豫。
答案 4 :(得分:0)
你会陷入语义困境。老实说,我开始写一本近乎小说作为答案,但我决定让它更简洁。
在JavaScript中,不要将objects
视为由properties
和methods
组成。它会让你感到困惑,因为在JS中定义差异更难。
将objects
视为由key-value pairs
组成。 key
只是value
的简写名称。 value
可以是:
AKA,值可以只是任何。这就是为什么当你开始标记javascript对象的properties
和methods
时,它会变得非常混乱。相信我,只要考虑一下key
或value
,你就会为自己省事。
回答你原来的问题:
property
可以为object
,但不必。{/ p>
语义分解:
document
对象的property
名为createElement
。 createElement
的值为function
,因此createElement
为method
。 function
实际上是object
的特殊类型。 因此,当我们将所有内容放在一起时,createElement
为property
,method
,和为object
。了解为什么key-value pairs
更容易概念化? ;)