当前位置: 移动技术网 > IT编程>开发语言>JavaScript > JavaScript面向对象的笔记

JavaScript面向对象的笔记

2019年06月09日  | 移动技术网IT编程  | 我要评论

主要内容

①函数的四种调用模式

②补充知识点

③面试题

①函数的四种调用模式

原型链---

作用域链--- javascript面向对象的三大模块。

函数-----

定义方式:声明式 表达式式 函数对象构造器构造模式(new function)。

四种调用模式:

① 函数模式

函数调用模式: 自调用(fn)() 函数调用fn()

function foo(){

console.log("我是一个函数")

}

foo();//函数调用模式 函数名(参数) 这种形式去调用。

//window调用

// 任何自调用函数 都是函数模式。

//this 指向window

window.foo();谁调用this就指向谁。

②方法模式

区分:this指向对象。

var obj={foo:function(){console.log(this)}}

函数本身也是对象,打印this会打印这个函数对象的函数本身。

对象.fn(参数);

宿主对象:方法储存的位置,即称为宿主对象。

对象调用方法的例子:

对象调用:

var obj={func:function(){}};

obj.func();

数组对象调用:

var arr=[function(){}];

arr[0]();

函数对象调用:

function fn(){};

function f1(){console.log(this)};

fn.f1=f1;

fn.f1();

面试题:

var length=10;

function fn(){

console.log(this.length)

}

var obj={

length:5,

method:

function(fn){

fn();

arguments[0]();

}

}

③构造模式

构造器调用模式:

区分:new关键字引导。

new的作用:用来申请创建对象,创建出来的对象传递给构造函数的this指向这个空对象。

var obj=new fn(); fn是一个构造函数。

构造函数的返回值:不写return值,默认返回this。

写return:①如果返回数据紧跟基本数据类型,则忽略返回数据。

② 返回数据跟引用类型,那么构造函数返回该引用类型数据,忽略this。

③无参数时,()可以省略。

④默认返回this。

面试题:

function foo(){

getname = function(){ alert(1); };

return this;

}

function getname(){

alert(5);

}

foo.getname = function(){ alert(2); };

foo.prototype.getname = function(){ alert(3); };

getname = function(){ alert(4); }; // 覆盖前面的 getname

foo.getname(); // = 2

getname(); // = 4

foo().getname();

getname(); // = 1

new foo.getname(); // = 2

new foo().getname(); // = 3

new new foo().getname();

关于构造函数的总结:

①如果构造函数没有参数,可以省略小括号

②如果希望创建对象并直接调用其方法

new person().sayhello();new person() 先结合先创建。

④上下文模式

概念:环境调用模式--> 在不同的环境下不同调用模式 统一一种格式,实现函数模式和方法模式

目的:实现借用方法。

优点:①提供统一的方法实现两种方式的调用,

②不会污染宿主对象,不必要宿主对象包含该方法。 实现方法借调。

③可以改变上下文this

语法:1,call形式 函数名.call(参数);

函数模式: foo.call(null,参数1,参数2,....)

方法模式:foo.call(obj,参数1,参数2,....)

-----------------------------------------------------------------

2,apply形式 函数名.apply(参数);

功能完全一样,唯一不同的是参数形式。

用法:

function foo(){ console.log(this)};

var o={name:"jim"};

foo();//函数模式调用;

o.func=foo;

o.func();//方法模式调用;

foo.apply()or foo.apply(null)//上下文模式函数调用。

foo.apply(o)//上下文模式的方法调用:

带有参数的函数模式

函数模式:foo.apply(null,[参数1,参数2]);

方法模式:foo.apply(o,[参数1,参数2]);

使用其他对象的语法时 array.protype.apply(arr,[数组或者伪数组]);

3,应用:借用构造方法实现继承

案例:function person(name,age,gender){

this.age=age;

this.name=name;

this.gender=gender;

}

function student(name,age,gender,course){

person.call(this,name,age,gender);

this.course=course;

}

var p1=new student("夏志勇",24,"male","前端");

console.log(p1);

⑤补充函数调用模式

函数bind方法 bind绑定 邦迪

案例:

var t=document.getelementbytagname.bind(document),arr=[];

arr.push.apply(arr,t('p'));

arr.push.apply(arr,t('p'));

arr.foreach(e){

e.style.border="1px solid red"

}

绑定是使对象绑定方法。

语法:var 新方法=旧方法.bind(对象);

新方法();用对象调用方法。

⑥补充object.prototype成员介绍

1,construtor

2,hasownproperty 判断属性是不是自己提供的

用法:对象.hasownproperty("属性名") 返回值是布尔值

3,propertyisenumerable 判断是不是可枚举的

4,对象 isprototypeof(对象) 对象是不是对象的原型

5,tostring,tolocalestring,valueof

⑦ function.prototype

⑧包装类型

字符串:string 基本包装对象 sstring

数字: number 基本包装对象 number

布尔: boolean 基本包装对像 boolean

开发过程中在需要的时候会将数据转换为对象类型。当方法结束后这个对象就被立刻释放了。

转换过程

"abc"--> new string("abc")--->new string("abc").方法 --> "abc"

转换时间:调用方法

call 或者apply 第一个参数的时候。

⑨es5引入的部分数组方法

① foreach 遍历方法

实例:var arr=[1,2,3,4];

arr.foreach(function(v,i){

console.log(i);索引

console.log(v);值

}) //高版本使用

② map 映射

实例:

var arr=[1,2,3,4];

var a= arr.map(function(v,i){return i})

返回值构成的数组;

③filter 筛选数组

实例:

var arr[1,2,3,4,5,6];

var a=arr.filter(function(v){ return v%2===1}) 获取奇数

④some 判断数组中至少有一个符合要求 返回值是布尔值

实例:

var arr=["123",{}.function(){},123];

var isture=arr.some(function(v){

return typeof v==="number";

}) 有一个符合要求;

⑤every 判断数组必须都符合要求 返回值是布尔值

实例:

var arr=["123",{}.function(){},123];

var isture=arr.every(function(v){

return typeof v==="number";

}) 所有都符合要求;

⑥ indexof 查找数组中的位置 从左向右找

arr.indexof(查找开始的位置,查找的值)

lastindexof 从右往左找

面向对象:①实现继承的多种方式

②原型链结构图

③预解析,代码执行

④作用域链

⑤自调用函数(沙箱模式)

⑥上下文模式。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网