js原型和原型链

  • 如何准确判断一个变量是数组类型
  • 写一个原型链继承的例子
  • 描述new一个对象的过程
  • zepto或其他框架源码中如何使用原型链

知识点

  • 构造函数
  • 构造函数-扩展
  • 原型规则和实例
  • 原型链
function fn(name,age){
    this.name = name;
    this.age = age;
    this.class = 'class-1';
    //return this //默认有这一行
}
var f = new fn('zhansan',20)

var a = {}其实是var a =new Object()的语法糖;
var a = {}其实是var a = new Array()的语法糖;
function Foo(){}其实是var Foo = new Function(){};
使用instanceof判断一个函数是否一个变脸的构造函数;

原型的5条规则

  • 所有引用类型(数组、对象、函数)都具有对象的属性,即可自由扩展属性(除null以外);
var obj = {};
obj.a=100;
  • 所有的引用类型(数组、对象、函数)都有一个_proto_属性,属性值是一个普通对象;
var obj ={};
console.log(obj._proto_)
  • 所有的函数,都有一个prototype属性,属性值也是一个普通的对象;
function fn(){}
fn.a = 100;
console.log(fn.prototype)
  • 所有引用类型(数组、对象、函数,_proto_属性值指向它的构造函数的“prototype”属性值;
console.log(obj._proto_ === Object.prototype)
  • 当试图得到一个对象的某个属性是,如果这个对象本身没有这个属性,那么就会去他的_proto_(即构造函数的prototype)中寻找;

循环对象自身的属性

var item;
for(item in f){
    //高级浏览器已经在for in中屏蔽了来自原型的属性
    /但这里建议大家家长这个判断,保证程序的健壮性
    if(f.hasOwnProperty(item)){
        console.log(item)
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值