javascript之面向对象
来源:互联网 发布:mac dmg 沙盒 编辑:程序博客网 时间:2024/06/10 23:56
对象:
创建对象常用的两种方式,
工厂模式:
function creatObject(name,age){ var o = new Object(); o.name = name; o.age = age; o.run = function(){ return this.name +this.age+"run...."; } return o;}var ob1 = creatObject('sdfas',11);alert(ob1.run());#工厂模式有一个问题,就是只能判断创建的对象是Object类型,其他则无法判断。
构造函数模式:
function Student(name,age) { this.name = name; this.age = age; this.run = function(){ return this.name + this.age+"run ...."; }}var s = new Student('mmm',100);alert(s.run())#如果使用var s=Student('mmm',100),这种形式,则函数定义时,使用的this将指向全局对象window
构造函数模式和工厂模式的区别:
1.构造函数方法没有显示的创建对象(new Object());
2.直接将属性和方法赋值给this 对象;
3.没有renturn 语句。构造函数模式中对象的创建过程:
1.当使用了构造函数,并且new 构造函数(),那么就后台执行了new Object();
2.将构造函数的作用域给新对象,(即new Object()创建出的对象),而函数体内的this 就
代表new Object()出来的对象。
3.执行构造函数内的代码;
4.返回新对象(后台直接返回)。注意:this 其实就是代表当前作用域对象的引用。如果在全局范围this 就代表window 对象,如果在构造函数体内,就代表当前的构造函数所声明的对象。
call和apply方法
call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向。因为 JavaScript 的函数存在「定义时上下文」和「运行时上下文」以及「上下文是可以改变的」这样的概念.二者的作用完全一样,只是接受参数的方式不太一样。
例如,有一个函数 func1 定义如下:var func1 = function(arg1, arg2) {};
就可以通过 func1.call(this, arg1, arg2); 或者 func1.apply(this, [arg1, arg2]); 来调用。其中 this 是你想指定的上下文,他可以任何一个 JavaScript 对象(JavaScript 中一切皆对象),call 需要把参数按顺序传递进去,而 apply 则是把参数放在数组里。JavaScript 中,某个函数的参数数量是不固定的,因此要说适用条件的话,当你的参数是明确知道数量时,用 call,而不确定的时候,用 apply,然后把参数 push 进数组传递进去。当参数数量不确定时,函数内部也可以通过 arguments 这个数组来便利所有的参数。
此处引用自 作者:赵望野
https://www.zhihu.com/question/20289071/answer/14745394
- javascript 之面向对象
- JavaScript之面向对象
- javascript之面向对象
- Javascript之面向对象
- JavaScript之面向对象
- javascript学习之面向对象
- JavaScript之面向对象1
- JavaScript之面向对象程序设计
- Javascript面向对象之继承
- JavaScript面向对象之-----封装
- Javascript 面向对象之封装
- JavaScript面向对象之继承
- JavaScript 之面向对象编程
- JavaScript之面向对象详解
- JavaScript 面向对象之JSON
- JavaScript 面向对象之继承
- JavaScript面向对象之属性实现javascript
- 【javascript】javascript之面向对象高级特性
- MySQL 数据表创建详细SQL语法
- Oracle学习笔记(三)——Oracle用户的管理、权限与角色
- 一个web项目web.xml的配置中<context-param>配置作用
- SQL基础知识(3)
- Android使用BitmapFactory.Options解决加载大图片内存溢出问题
- javascript之面向对象
- swift 之?和!
- ios计算器
- SQLite清空表数据并将自增ID设为0
- LINUX多线程
- linux配置redis和phpredis扩展
- bzoj2820&&YY的GCD
- caffe代码阅读8: Data_layers的实现细节(各个数据读取层的实现细节) 2016.3.25-28
- SpringMVC中ModelAndView, Model, ModelMap, Map, String, void的相关内容