原型和原型链

一.构造函数

1.构造函数最好大写开头

构造函数末尾一行默认有return this,故可理解为加了this为公用属性,没加this为私有属性。

function F(){

this.name = "chen";

age = 22;

//默认有return this

}

var f = new F();

console.log(f.age)//undefined

console.log(f.name)//"chen"

 

2.new 一个对象的过程

1.把参数传进去

2.函数里面的this先变成一个空对象

3.属性赋值

4.默认把this return出来

5.把this赋值给f

 

3.从易读性和性能上考虑,都选择采用前面的写法

var a = {}是var a = new Object()的语法糖

var a = []是var a = new Array()的语法糖

var function a(){} 是 var a = new Function()的语法糖

使用instanceof判断一个函数是否是一个变量的构造函数

Functtion()构造函数的前n个为传入的参数,最后一个为函数体。参数都为字符串。

new Function("a", "b", "c", "return a+b+c") 

new Function("a, b, c", "return a+b+c") 

new Function("a,b", "c", "return a+b+c")

 

4.5条原型规则

1.所有的引用类型(数组 函数 对象)(除了“null”以外),都具有对象特性,即可自由扩展属性;

2.所有的引用类型,(数组 函数 对象)(除了“null”以外),都有一个__proto__(隐式原型,浏览器帮我们扩展的)(前后各两条下划线,共四条下划线)属性,属性值是一个普通的对象。

3.所以的函数都有一个prototype属性(显式原型,浏览器帮我们拓展了),属性值是一个普通的对象。

4.所有的引用类型(数组 对象 函数),__proto__属性值指向它的构造函数的“prototype”属性值      “===”

5.当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的__proto__(即它的构造函数的prototype)中寻找。

不管是原型中定义的函数,还是属性定义的函数,this都指向对象。

循环对象自身的属性 

var item

for(item in f){

if(f.hasProperty(item)){

console.log(item)

}

}

 

5.instanceof

 

用于判断 引用类型 属于哪个构造函数 的方法

f instanceof Foo  的判断逻辑是:

f 的__proto__一层一层往上,能否对应到Fooprototype

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值