| 思考一下,以下输出的是什么: 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) 理解原型继承 (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |