欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

原型和原型链--构造函数

程序员文章站 2022-07-11 08:08:19
原型和原型链--构造函数 思考? 1.如何准确判断一个变量是数组类型 2.写一个原型链继承的例子 3.描述new一个对象的过程 4.zepto(或其他框架)中如何使用原型...

原型和原型链--构造函数

思考?

1.如何准确判断一个变量是数组类型
2.写一个原型链继承的例子
3.描述new一个对象的过程
4.zepto(或其他框架)中如何使用原型链

知识点:


1.构造函数

构造函数:一般函数为大写字母开头的都是构造函数,如下:

function foo(name,age){
    this.name=name
    this.age=age
    //return this  // 默认有这一行
}
var f = new foo('l',20) ; //构造函数形成实例,可以创建多个对象;f是一个空对象,原型是foo

// new 的时候,其实this变成一个空对象,再执行构造函数中的赋值操作,返回的对象便有了这些值

2.构造函数-扩展

var a={}其实是var a=new object()的语法糖
var a=[]其实是var a=new array()的语法糖
function foo(){}其实是var foo=new function()

3.原型规则和示例

原型是什么?

javascript中原型是一个prototype对象,用于表示类型之间的关系。

规则:

1.所有的引用类型(数组、对象、函数),都具有对象特性,即可*扩展属性(除了"null"对象以外)

var obj={};
obj.a=100;
var arr=[];
arr.a=100;
function fn(){}
fn.a=100;


2.所有引用类型都有一个_proto_(隐式原型)属性,属性值是一个普通的对象

console.log(obj._proto_); //隐式原型,都具有可扩展属性原则


3.所有函数都有一个prototype(显示原型)属性,属性值也是一个普通对象

console.log(fn.prototype); //显示原型


4.原型链

原型链是什么?
javascript万物都是对象,对象和对象之间也有关系,并不是孤立存在的。对象之间的继承关系,在javascript中是通过prototype对象指向父类对象,直到指向object对象为止,这样就形成了一个原型指向的链条,专业术语称之为原型链。

原型和原型链--构造函数

5.instanceof

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

f instanceof foo //判断f这个引用类型是否属于foo构造函数,判断逻辑:f的_proto_一层一层往上,能否对应到foo.prototype

判断一个变量是否为"数组":变量名 instanceof array,如下代码:

var arr=[];
arr instanceof array //true
typeof arr //object, typeof是无法判断是否是数组的

解题:

1.如何准确判断一个变量是数组类型

变量名 instanceof array


2.写一个原型链继承的例子

function name(){
    this.name=function(){
        console.log("killua")
    }
}
function firstname(){
    this.firstname=function(){
        console.log("l")
    }
}
name.prototype = new firstname();
var he = new name();
he.name();  //"killua"
he.firstname();  //"l"


3.描述new一个对象的过程

原型和原型链--构造函数
4.zepto(或其他框架)源码中如何使用原型链

封装dom查询的例子

function elem(id){
    this.elem = document.getelementbyid(id)
}
elem.prototype.html = function(val){
    var elem = this.elem
    if(val){
        elem.innerhtml = val
        return this //链式操作
    }else{
        return elem.innerhtml
    }
}
elem.prototype.on = function(type, fn){
    var elem = this.elem
    elem.addeventlistener(type, fn) //addeventlistener() 方法用于向指定元素添加事件句柄
}
var p1 = new elem('p1')
//console.log(p1.html())
p1.html('

hello killua

').on('click',function(){ alert('clicked') }).html('

javascript

') r -p$slave_pass -e "stop slave" date=`date +%y%m%d` # todo mkdir -p $bck_dir $bin_dir/mysqldump --opt -u$db_user -p$db_pass $db_name \ > $bck_dir/db1__$date.sql #start slave 开启主从 #$bin_dir/mysql -u$slave_user -p$slave_pass -e "start slave" 删除前两天的备份 #!/bin/sh find /data/backup/mysqlbackup -mtime +1 -name "db1__*" -exec rm -f {} \; find /data/backup/mysqlbackup -mtime +1 -name "db2__*" -exec rm -f {} \;