不JS上

2018-09-09  本文已影响0人  yyggfffg

作用域

函数作用域和块作用域

函数作用域

提升

foo();
var foo=function bar(){
};

闭包

关于this

对象

类型
内置对象
属性描述符
var myObject={};
Object.defineProperty(myObject,"a",{
      value:2,
      writable:true,
      configurable:true,
      enumerable:true
});
不变性
  1. 对象常量 结合writable:false和configurable:fasle就可以创建一个真正的常量属性。
  2. 禁止扩展 如果想禁止一个对象添加新属性并且保留已有属性,可以使用Object.preventExtensions();
  3. 密封 Object.seal()会创建一个“密封”的对象,这个方法实际上会在一个现有对象上调用Object.preventExtensions()并把所有现有属性标记为configurable:false。
  4. 冻结 Object.freeze()会创建一个冻结对象,这个方法实际上会在一个现有对象上调用Object.seal()并把所有“数据访问”属性标记为writable:false,这样就无法修改它们的值了。
Getter和Setter
存在性

原型

行为委托

Foo={
    init: function(who){
            this.me=who;  
    },
    identify: function(){
            return "I am " + this.me;
    }
};
Bar = Object.create(Foo);
Bar.speak=function(){
    alert("Hello, "+this.identify()+".");
};
var b1=Object.create(Bar);
b1.init("b1");
var b2=Object.create(Bar);
b2.init("b2");
b1.speak();
b2.speak();

相比面向对象风格来说,这段代码简洁了许多,我们是把对象关联起来,并不需要那些既复杂又令人困惑的模仿类的行为。

上一篇 下一篇

猜你喜欢

热点阅读