mirror of
https://github.com/ruanyf/es6tutorial.git
synced 2025-05-29 22:12:21 +00:00
docs(object): edit object
This commit is contained in:
parent
a8cb58ba96
commit
e1abf373a3
@ -770,7 +770,7 @@ const doSomething = (function () {
|
|||||||
}());
|
}());
|
||||||
```
|
```
|
||||||
|
|
||||||
## name属性
|
## name 属性
|
||||||
|
|
||||||
函数的`name`属性,返回该函数的函数名。
|
函数的`name`属性,返回该函数的函数名。
|
||||||
|
|
||||||
@ -779,23 +779,23 @@ function foo() {}
|
|||||||
foo.name // "foo"
|
foo.name // "foo"
|
||||||
```
|
```
|
||||||
|
|
||||||
这个属性早就被浏览器广泛支持,但是直到ES6,才将其写入了标准。
|
这个属性早就被浏览器广泛支持,但是直到 ES6,才将其写入了标准。
|
||||||
|
|
||||||
需要注意的是,ES6对这个属性的行为做出了一些修改。如果将一个匿名函数赋值给一个变量,ES5的`name`属性,会返回空字符串,而ES6的`name`属性会返回实际的函数名。
|
需要注意的是,ES6 对这个属性的行为做出了一些修改。如果将一个匿名函数赋值给一个变量,ES5 的`name`属性,会返回空字符串,而 ES6 的`name`属性会返回实际的函数名。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var func1 = function () {};
|
var f = function () {};
|
||||||
|
|
||||||
// ES5
|
// ES5
|
||||||
func1.name // ""
|
f.name // ""
|
||||||
|
|
||||||
// ES6
|
// ES6
|
||||||
func1.name // "func1"
|
f.name // "f"
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,变量`func1`等于一个匿名函数,ES5和ES6的`name`属性返回的值不一样。
|
上面代码中,变量`f`等于一个匿名函数,ES5 和 ES6 的`name`属性返回的值不一样。
|
||||||
|
|
||||||
如果将一个具名函数赋值给一个变量,则ES5和ES6的`name`属性都返回这个具名函数原本的名字。
|
如果将一个具名函数赋值给一个变量,则 ES5 和 ES6 的`name`属性都返回这个具名函数原本的名字。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const bar = function baz() {};
|
const bar = function baz() {};
|
||||||
@ -807,13 +807,13 @@ bar.name // "baz"
|
|||||||
bar.name // "baz"
|
bar.name // "baz"
|
||||||
```
|
```
|
||||||
|
|
||||||
`Function`构造函数返回的函数实例,`name`属性的值为“anonymous”。
|
`Function`构造函数返回的函数实例,`name`属性的值为`anonymous`。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
(new Function).name // "anonymous"
|
(new Function).name // "anonymous"
|
||||||
```
|
```
|
||||||
|
|
||||||
`bind`返回的函数,`name`属性值会加上“bound ”前缀。
|
`bind`返回的函数,`name`属性值会加上`bound `前缀。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
function foo() {};
|
function foo() {};
|
||||||
|
@ -13,7 +13,7 @@ baz // {foo: "bar"}
|
|||||||
var baz = {foo: foo};
|
var baz = {foo: foo};
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码表明,ES6允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。下面是另一个例子。
|
上面代码表明,ES6 允许在对象之中,直接写变量。这时,属性名为变量名, 属性值为变量的值。下面是另一个例子。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
function f(x, y) {
|
function f(x, y) {
|
||||||
@ -244,22 +244,35 @@ myObject // Object {[object Object]: "valueB"}
|
|||||||
函数的`name`属性,返回函数名。对象方法也是函数,因此也有`name`属性。
|
函数的`name`属性,返回函数名。对象方法也是函数,因此也有`name`属性。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
var person = {
|
const person = {
|
||||||
sayName() {
|
sayName() {
|
||||||
console.log(this.name);
|
console.log(this.name);
|
||||||
},
|
},
|
||||||
get firstName() {
|
|
||||||
return "Nicholas";
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
person.sayName.name // "sayName"
|
person.sayName.name // "sayName"
|
||||||
person.firstName.name // "get firstName"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,方法的`name`属性返回函数名(即方法名)。如果使用了取值函数,则会在方法名前加上`get`。如果是存值函数,方法名的前面会加上`set`。
|
上面代码中,方法的`name`属性返回函数名(即方法名)。
|
||||||
|
|
||||||
有两种特殊情况:`bind`方法创造的函数,`name`属性返回“bound”加上原函数的名字;`Function`构造函数创造的函数,`name`属性返回“anonymous”。
|
如果对象的方法使用了取值函数(`getter`)和存值函数(`setter`),则`name`属性不是在该方法上面,而是该方法的属性的描述对象的`get`和`set`属性上面,返回值是方法名前加上`get`和`set`。
|
||||||
|
|
||||||
|
```javascript
|
||||||
|
const obj = {
|
||||||
|
get foo() {},
|
||||||
|
set foo(x) {}
|
||||||
|
};
|
||||||
|
|
||||||
|
obj.foo.name
|
||||||
|
// TypeError: Cannot read property 'name' of undefined
|
||||||
|
|
||||||
|
const descriptor = Object.getOwnPropertyDescriptor(o, 'foo');
|
||||||
|
|
||||||
|
descriptor.get.name // "get foo"
|
||||||
|
descriptor.set.name // "set foo"
|
||||||
|
```
|
||||||
|
|
||||||
|
有两种特殊情况:`bind`方法创造的函数,`name`属性返回`bound`加上原函数的名字;`Function`构造函数创造的函数,`name`属性返回`anonymous`。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
(new Function()).name // "anonymous"
|
(new Function()).name // "anonymous"
|
||||||
@ -270,7 +283,7 @@ var doSomething = function() {
|
|||||||
doSomething.bind().name // "bound doSomething"
|
doSomething.bind().name // "bound doSomething"
|
||||||
```
|
```
|
||||||
|
|
||||||
如果对象的方法是一个Symbol值,那么`name`属性返回的是这个Symbol值的描述。
|
如果对象的方法是一个 Symbol 值,那么`name`属性返回的是这个 Symbol 值的描述。
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const key1 = Symbol('description');
|
const key1 = Symbol('description');
|
||||||
@ -283,7 +296,7 @@ obj[key1].name // "[description]"
|
|||||||
obj[key2].name // ""
|
obj[key2].name // ""
|
||||||
```
|
```
|
||||||
|
|
||||||
上面代码中,`key1`对应的Symbol值有描述,`key2`没有。
|
上面代码中,`key1`对应的 Symbol 值有描述,`key2`没有。
|
||||||
|
|
||||||
## Object.is()
|
## Object.is()
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user