构造函数、原型、原型链
来源:互联网 发布:2016年旅游市场数据 编辑:程序博客网 时间:2024/05/21 13:22
一、如何准确判断一个变量是数组类型?
知识点:构造函数
- 函数名称以大写字母开头
- 所有的引用类型(对象、数组、函数)都有构造函数
- var a={ }其实是var a=new Object( )的语法糖
- var a=[ ]其实是var a=new Array( )的语法糖
- function Foo( ){ }其实是var Foo=new Function ( )
使用instanceof判断一个函数是否是一个变量的构造函数
答案:
用instanceof判断:变量 instanceof Array
var arr=[ ];
arr instanceof Array; //true
typeof arr; //object , typeo是无法判断是否是数组的
二、描述new一个对象的过程
考察点:构造函数的问题
- 创建一个对象
- this指向这个新对象
- 执行代码,即对this赋值
- 返回this
三、原型和原型链
五条原型规则
所有的引用类型(数组、对象、函数),都具有对象的特性,即可自由拓展属性(null除外)
所有的引用类型,都有一个
__proto__
(隐式原型)属性,属性值都是一个普通的对象所有的函数都有一个prototype(显示原型)属性,属性值也是一个普通对象
所有的引用类型,
__proto__
属性值指向它的构造函数的prototype属性值当试图得到一个对象的某个属性时,如果这个对象本身没有这个属性,那么会去它的
__proto__
(即它的构造函数的prototype)中寻找
举例://第一条,可自由拓展属性 var obj={ };obj.a=100; var arr=[ ];arr.a=100; function fn( ){ }; fn.a=100;//第二条,__proto__属性 console.log(obj.__proto__); console.log( arr.__proto__); console.log(fn.__proto__);//第三条,函数有prototype属性 console.log(fn.prototype);//第四条,引用类型的__proto__属性值指向它构造函数的prototype的属性值 console.log(obj.__proto__===Object.prototype); console.log(arr.__proto__===Array.prototype); console.log(fn.__proto__===Function.prototype);//第五条,引用类型的__proto__属性值指向它的构造函数的prototype属性值 function Foo(name,age){ this.name=name; } //对函数的prototype属性(显式原型)拓展alertName属性 Foo.prototype.alertName=function ( ){ alert(this.name); } var f=new Foo( '张三'); f.printName=function ( ){ console.log( this.name); } //测试 f.printName( ) ; //f直接调用它的拓展printName属性 f.alertName( ); //f.本身没有alertName属性,所以去它的构造函数Foo的prototype里面找
四、写一个原型链继承的例子
原型链就是把原型连接在一起组成的链,那么为什么要把原型连接在一起呢?这就是继承啦,当你new一个对象,然后把另一个对象赋值给他的原型对象
function Person(){};function Niko(){};Niko.prototype = new Person();
这样,Niko就具有了Person的所有属性和方法
方便理解但不推荐面试时写的例子:
function Animal( ){ this.eat=function ( ){ console.log(' animal eat'); }}function Dog( ){ this.bark=function ( ){ console.log('dog bark'); }}Dog.prototype=new Animal( ); //实例化一个Animal对象给dog的显式原型prototype;var hashiqi=new Dog( ); //哈士奇有dog的属性也有animal的属性
比较实用原型链例子:
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)}var div1=new Elem('div1')//console.log(div1.html())div1.html('<p>你好啊 世界<p/>')div1.on('click',function(){ alert('clicked')})
阅读全文
0 0
- 构造函数、原型、原型链
- 原型链与构造函数
- 类、构造函数、原型
- 构造函数与原型
- 原型与构造函数
- 对象、构造函数、原型
- js关于原型构造函数和原型链的理解
- Js中的对象、构造函数、原型、原型链及继承
- js中的构造函数,原型,原型链,继承
- Js中的对象、构造函数、原型、原型链及继承
- 对象-工厂模式-构造函数-原型-原型链
- 面向对象,创建对象,构造函数,原型,原型链
- 面向对象、构造函数、原型与原型链详解
- JSON字符串/原型链/构造函数
- new构造函数和原型链
- 构造函数/原型/作用域链
- 函数的原型。。。原型链
- 构造器 原型链
- 获取view的图片
- HashMap的jdk1.8分析
- #bzoj3376#快递配对(树 + 重心)
- View—DecorView,measureSpec与LayoutParams
- 构造函数与普通函数的比较
- 构造函数、原型、原型链
- 宏华Atsl ver 2000 Build 20020225 65 零售版
- 最完美xp安装教程
- ListView懒加载
- Shell-彩色进度条~
- 信息论 一般信道率失真函数求解证明,多重累加号求偏导数
- epoll深度分析
- 数据结构与算法学习:选择排序
- idea下载多个插件项目启动不了解决方案