-
1、函数有自己的作用域,定义的局部变量外部无法访问 2、浏览器编程可用window.export=export将想输出的对象输出出去 3、外部使用,只能通过方法来访问函数里的变量 4、闭包使函数初始化之后仍能访问变量查看全部
-
1、这就是闭包,在初始化函数的处理(addEventListenr)时,click事件处理函数引用的是for循环中的变量i 初始化结束后,当用户点击这四个元素中的任何一个时,引用的i仍然是for循环中的i,由于初始化结束后i的值是4,所以自然就都是4 2、用立即执行的匿名函数包装起来,将每次遍历的值传进去 每次点击的时候,i会取自每一个闭包环境下的值(i来自每次循环赋值的i)查看全部
-
当新创建一个函数时,会生成一个prototype属性,其中包括constructor指向其本身,_prototype_指向Object.prototype(toString方法的引用来自于此)。 Object.create()创建一个新的空对象,让Student.prototype指向于它,从而避免了与Person.prototype指向同一对象。进而可以让Student单独创建属于自己的函数,而不影响到Person,这样做了之后Student.prototype.constructor会指向Person,因此为了避免混乱,需要用Student.prototype.constructor = Student 把它修改为指向Student Object.create()创建一个新的空对象,让Student.prototype指向于它,从而避免了与Person.prototype指向同一对象。进而可以让Student单独创建属于自己的函数,而不影响到Person 1.Object.create()创建一个空对象,这个空对象的原型指向Person.prototype,将student的prototype=这个空对象的原型,实现一个继承关系,这里的construstor指向person,可以修改成自身student 2,如果直接students.prototype=person.prototype,在修改students时就会影响到person,因为他们指向同一个对象 Person 函数直接调用时,this 指向全局对象(在浏览器里指向 window),因此会增加两个全局变量name和age。 Person 函数如果作为构造器调用时,this 会指向一个原型为 Person.prototype 的空对象,并通过 this.name 给这个空对象赋值后,return this。 通过 Person.prototype.hi=function(){}来创建所有 Person 实例共享的方法,同理可以创建所有实例共享的属性。 Student.prototype=Object.create(Person.prototype);实现继承关系。 Student.prototype.constructor=Student;查看全部
-
prototype 属性与原型 function Foo(){} 1、声明构造器 Foo 时, Foo 构造器默认会有 Foo.prototype 属性,Foo.prototype 属性本身也是对象,因此可以叫做“对象属性” 2、同时,Foo.prototype 默认又会有两个属性 Foo.prototype.constructor 和 Foo.prototype.__proto__ prototype会在函数构造实例的时候成为新构造的实例的原型。 创建Foo函数后就会生成一个Foo.prototype,属性为object. 可以给这个属性定义属性x等。 当声明对象obj3时,this.y会指向对象obj3,而obj.x会指向Foo的原型链。 Foo.prototype.__proto__ 就是 Foo.prototype 的原型 Foo.prototype.__proto__ 又指向 Object 的 prototype 属性,即 Object.prototype Foo.prototype 的作用: 当使用 var obj = new Foo() 生成 Foo 的实例 obj 时,Foo.prototype 对象属性会当作 obj 的原型 obj.__proto__ prototype 属性与原型 __proto__ 的关系: prototype 是构造器(函数对象)上面预置的对象属性,原型 __proto__ 是对象(实例对象)上的原型 对象的原型 __proto__ 指向其构造器的 prototype 属性查看全部
-
1、o.f()为什么会输出37? 对象o调用了方法f(), 然而f()就是要返回当前对象的属性a, 而当前对象是o, o有一个属性a的值是37, 所以打印37 2、o是对象吗?是;f是函数吗?是 3、为什么可以对象.函数()? 对象.函数(), 这种形式表示要执行函数。函数分为两种状态:定义状态和运行状态。而调用函数让它运行的时候要用到这种格式查看全部
-
正常调用函数MyClass()那么this会指向全局对象Window,但如果用New把它作为构造器来调用,那么this会指向一个空的对象,并且这个对象的原型会指向MyClass.prototype,最后this会作为返回值,因为没有return,即o=this 因为有return返回值,因此o!=this 构造函数this会指向原型为MyClass的空对象,若无返回值,this默认为返回值查看全部
-
p是一个把o作为它的__proto__的对象,也就是说 p.__proto__===o p为空的对象且其原型会指向o,创建了两个a,b属性,当调用对象上的方法时,p.f()是调用对象上的原型链上的对象o的属性f,原型链上的this仍然可以拿到当前对象上的属性ab,所以不管this是属于原型链上的还是当前对象的都可以指向p这个对象查看全部
-
作为对象方法的函数的this 1、当函数作为函数调用时,this指向全局对象window 2、严格模式下,为undefined 3、当函数作为对象的方法调用时,this通常是指向当前函数的拥有者查看全部
-
1、函数的声明会被前置,如:function foo(){}; 会初始化在一个vo变量对象里面,这个函数的值为:foo函数本身 2、函数的表达式会被忽略掉,更不会被前置,如:var a =function fpp(){};这里的fpp是一个函数表达式(因为他要是赋值给a)在这里初始化的时候会被忽略只保留变量a,且变量a的值初始化为undefined 3、由于解析器在向执行环境加载数据时,会率先读取函数声明,并使其在执行任何代码之前可用,所以存在函数声明提升,对代码求值的时候,js引擎在第一遍会声明函数并将它们放到源代码树的顶部,所以即使调用函数的语句在声明函数的前面也能正常执行。但是对于函数表达式,它必须等到解析器执行到它所在的代码行,才会真正被解释执行 4、Constructor 函数构造器就是可以用来构建生成新的函数或者对象的函数 函数构造器也是一个普通函数,只不过在使用该函数构造生成新的函数或者对象的时候,该函数才会称为函数构造器 构建的过程简单来说分两步: 1、创建一个空对象,并执行类似构造函数bind该空对象的过程。也就是把构造函数中的this指向新的空对象然后执行一遍,这个过程可以叫初始化 2、把空对象的原型指向构造函数的原型,也就是构建原型链继承构建出的对象或者函数可以称为构造函数的一个实例,因为在完成初始化的过程就设定新对象的许多私有属性,而且该对象也继承了构建函数的原型链,及上面的共有属性。查看全部
-
一般的函数调用,如果没有return语句,最后会返回一个undefined。 函数作为构造器调用时,如果没有return语句,或者return后面是基本类型的话,返回this。查看全部
-
变量初始化例子查看全部
-
执行上下文查看全部
-
闭包函数查看全部
-
原型链解析oop面向对象思想查看全部
-
Student.prototype = Object.create(Person.prototype); Object.create()方法是创建一个空函数,并把它的参数当作它的原型查看全部
举报
0/150
提交
取消