原型链是js面向对象的基础,非常重要。 一,创建对象的几种方法: 1,字面量 var o1 = { name:'o1' }; 2,构造函数 var M = function(name){ this.name = name; }; var o2 = new M('o2'); var a = {} 其实 ...
分类:
编程语言 时间:
2018-04-23 18:39:31
阅读次数:
173
functionFn(){this.test1=function(){console.log(‘test1()‘);};}Fn.prototype.test2=function(){console.log(‘test2()‘);};varfn=newFn();fn.test1();//"test1()"fn.test2();//"test2()"console.log(fn.toString())
分类:
编程语言 时间:
2018-04-07 11:23:32
阅读次数:
152
在javascript中,按照惯例,构造函数始终都应该以一个大写字母开头,而非构造函数则应该以一个小写字母开头。一个方法使用new操作符创建,例如下面代码块中的Person1(可以吧Person1看做是Java或C中的类)。 var Person1 = function(name){ this.na ...
分类:
编程语言 时间:
2018-04-05 20:59:21
阅读次数:
104
我们创建的每个函数都有一个 prototype (原型)属性,这个属性是一个指针,指向一个原型对象,而这个原型对象中拥有的属性和方法可以被所以实例共享。 一、理解原型对象 无论什么时候,只要创建了一个新函数,就会根据一组特定的规则为该函数创建一个 prototype属性,这个属性指向函数的原型对象。 ...
分类:
编程语言 时间:
2018-03-17 21:43:59
阅读次数:
272
闭包的官方定义时有权访问另一个函数作用域中的变量的函数。 闭包有两种用法:函数作为返回值,函数作为参数传递 第一:函数作为返回值 上面代码中,bar函数作为fn函数的返回值,赋值给了变量f1,因此执行f1()就是执行bar函数,执行bar函数时,变量max从fn作用域中去取。 第二:函数作为参数传递 ...
分类:
编程语言 时间:
2018-03-14 12:41:40
阅读次数:
177
对于值类型来说,可以用typeof判断,但typeof判断引用类型的时候返回值只有object/function,并不知道到底是哪一个。这个时候就要用到instance。例如 上图中,f1是被Foo函数创建得,但是“f1 instanceof Object”为什么是true呢? 至于为什么过会儿再说 ...
分类:
编程语言 时间:
2018-03-12 15:13:01
阅读次数:
199
上文中提到对象是函数创建得,而函数也是一种对象。对象就是属性的集合,没有方法。 每个函数都有一个属性——prototype。 这个prototype的属性值是一个对象(属性的集合),默认有一个constructor属性,指向这个函数本身。 上图中,superType是一个函数,这个函数有个proto ...
分类:
编程语言 时间:
2018-03-12 13:39:08
阅读次数:
199
1.背景 在ES6中,我们对类的定义如下 其实本质还是基于javascript原型链机制开发的语法糖 2. 深入setter/getter 2.1 setter/getter的调用执行时机 发现上面的代码报错 /** * 这是因为,在构造函数中执行this.name=name的时候,就会去调用set ...
分类:
其他好文 时间:
2018-03-03 22:30:09
阅读次数:
222
//构造函数 function Fn (name,age) { this.name = name; } //显示原型 Fn.prototype.alertName = function () { alert(this.name); } //创建实力 var f = new Fn('clm'); f.... ...
分类:
编程语言 时间:
2018-02-28 17:37:40
阅读次数:
184
原型及原型链 原型基础概念 上述代码非常简单,Person原型对象定义了公共的say方法,虽然此举在构造实例之后出现,但因为原型方法在调用之前已经声明,当此实例本身没有此say方法时候,会在自身原型上查找到此方法。 原型链 上面的例子中,test 对象从 Bar.prototype 继承下来;因此, ...
分类:
编程语言 时间:
2018-02-27 19:28:55
阅读次数:
149