| 
                         思考一下,以下输出的是什么: 
- function Foo(){  
 - console.log(this); // 打印 {}?  
 - }  
 
  
因为这是一个全局对象,记住,无论父作用域是什么,它都将由子作用域继承。打印出来是 window 对象。上面讨论的三个方法实际上用于设置这个对象。 
现在,this 的最后一个类型,在对象中的 this, 如下: 
- var person = { 
 -     name: "Stranger", 
 -     age: 24, 
 -     get identity() { 
 -         return {who: this.name, howOld: this.age}; 
 -     } 
 - }  
 
  
上述使用了 getter 语法,这是一个可以作为变量调用的函数。 
- person.identity; // returns {who: "Stranger", howOld: 24} 
 
  
此时,this 实际上是指对象本身。正如我们前面提到的,它在不同的地方有不同的表现。 
5) 理解对象 (Object.freeze, Object.seal) 
通常对象的格式如下: 
- var marks = {physics: 98, maths:95, chemistry: 91}; 
 
  
它是一个存储键、值对的映射。 javascript  对象有一个特殊的属性,可以将任何东西存储为一个值。这意味着我们可以将一个列表、另一个对象、一个函数等存储为一个值。 
可以用如下方式来创建对象: 
- var marks = {};  
 - var marks = new Object();  
 
  
可以使用 JSON.stringify() 将一个对象转制成字符串,也可以用 JSON.parse 在将其转成对象。 
- // returns "{"physics":98,"maths":95,"chemistry":91}"  
 - JSON.stringify(marks);  
 - // Get object from string  
 - JSON.parse('{"physics":98,"maths":95,"chemistry":91}');  
 
  
使用 Object.keys 迭代对象: 
- var highScere = 0;  
 - for (i of Object.keys(marks)) { 
 -   if (marks[i] > highScore) 
 -     highScore = marks[i]; 
 - }  
 
  
Object.values 以数组的方式返回对象的值。 
对象上的其他重要函数有: 
    - Object.prototype(object)
 
    - Object.freeze(function)
 
    - Object.seal(function)
 
 
Object.prototype 上提供了许多应用上相关的函数,如下: 
Object.prototype.hasOwnProperty 用于检查给定的属性/键是否存在于对象中。 
- marks.hasOwnProperty("physics"); // returns true  
 - marks.hasOwnProperty("greek"); // returns false  
 
  
Object.prototype.instanceof 判断给定对象是否是特定原型的类型。 
- function Car(make, model, year) { 
 -   this.make = make; 
 -   this.model = model; 
 -   this.year = year; 
 - } 
 - var newCar = new Car('Honda', 'City', 2007); 
 - console.log(newCar instanceof Car); // returns true  
 
  
使用 Object.freeze 可以冻结对象,以便不能修改对象现有属性。 
- var marks = {physics: 98, maths:95, chemistry: 91};  
 - finalizedMarks = Object.freeze(marks);  
 - finalizedMarks["physics"] = 86; // throws error in strict mode  
 - console.log(marks); // {physics: 98, maths: 95, chemistry: 91}  
 
  
在这里,试图修改冻结后的 physics 的值,但 JavaScript不允许这样做。我们可以使用 Object.isFrozen  来判断,给定对象是否被冻结: 
- Object.isFrozen(finalizedMarks); // returns true 
 
  
Object.seal 与 Object.freeze 略有不同。 Object.seal()  方法封闭一个对象,阻止添加新属性并将所有现有属性标记为不可配置。当前属性的值只要可写就可以改变。 
- var marks = {physics: 98, maths:95, chemistry: 91};  
 - Object.seal(marks);  
 - delete marks.chemistry; // returns false as operation failed  
 - marks.physics = 95; // Works!  
 - marks.greek = 86; // Will not add a new property  
 
  
同样, 可以使用 Object.isSealed 判断对象是否被密封。 
- Object.isSealed(marks); // returns true 
 
  
在全局对象函数上还有许多其他重要的函数/方法,在这里找到他们。 
6) 理解原型继承                         (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |