javascript面向对象
来源:互联网 发布:程序员上班3天被劝退 编辑:程序博客网 时间:2024/06/08 14:19
1.创建1个对象,然后给这个对象新建属性和方法
var box = new Object();//创建对象box.name='Lee';//添加属性box.age=100;box.run=function (){return this.name +this.age+'运行中...';//this表示当前作用域下的对象}console.log(box.run());var name = 'Jack';console.log(this.name);//这里的this代表的是window2.关于对象的引用问题
//对象引用var box = new Object();//创建对象box.name='Lee';//添加属性box.age=100;box.run=function (){return this.name +this.age+'运行中...';//this表示当前作用域下的对象}console.log(box.run());var box2 = box;//box2引用boxbox2.name='Jack';//添加属性box2.age=200;box2.run=function (){return this.name +this.age+'运行中...';//this表示当前作用域下的对象}console.log(box.run());//对象相互引用造成了混淆console.log(box2.run());3.为了解决多个类似对象声明的问题,可以使用工厂模式
//工厂模式function createObj(name,age){var obj = new Object();//创建对象obj.name = name;//添加属性obj.age = age;obj.run = function(){//添加方法return this.name+this.age+'运行中...';}return obj;//返回对象引用}var box = createObj('Lee',100);console.log(box.run());var box2 = createObj('Jack',200);console.log(box2.run());console.log(typeof box);//工厂模式解决了重复实例化的问题,但是存在识别问题,无法确定他们到底是哪个对象的实例console.log(box instanceof Object);4.工厂模式解决了重复实例化的问题,但是存在识别的问题,无法确定他们到底是哪个对象的实例,可以使用构造函数解决这个问题
/ECMAScript中可以采用构造函数来创建特定的对象function Box(name,age){//创建一个对象,所有构造函数的对象其实就是Objectthis.name = name;//添加属性this.age = age;this.run = function(){//添加方法return this.name+this.age+'运行中....';}}//1.构造函数没有new Object,但他后台会自动var obj = new Object();//2.this就相当于obj//3.构造函数不需要返回对象引用,她是后台自动返回的//4.构造函数也是函数,但函数名第一个字母大写//5.必须new 构造函数名(),构造函数名第一个字母必须大写//6.必须使用new运算符var box1 = new Box('Lee',100);var box2 = new Box('Jack',200);console.log(box1.run());console.log(box2.run());console.log(typeof box1);console.log(box1 instanceof Box);//可以识别,box1是Box对象的引用//关于this的使用,this代表当前作用域对象的引用,如果在全局范围this就代表window对象,//如果在构造函数体内,就代表当前的构造函数所生命的对象var name = 'kkk';console.log(this.name);5.探讨一下构造函数内部的方法问题,看看2个实例化后的属性或方法是否相等
function Box(name,age){//创建一个对象,所有构造函数的对象其实就是Objectthis.name = name;//添加属性this.age = age;this.run = function(){//添加方法return this.name+this.age+'运行中....';}}//console.log(Box('Lee',100));//undefined 构造函数用普通函数调用是无效的,必须使用new运算符var o = new Object();Box.call(o,'Lee',100);//对象冒充//console.log(o.run());var box1 = new Box('Lee',100);var box2 = new Box('Lee',100);console.log(box1.name==box2.name);//true 属性的值相等console.log(box1.age==box2.age);console.log(box1.run==box2.run);//false 方法其实也是一种引用地址console.log(box1.run()==box2.run());//true 方法的值相等,因为传参一致//加深理解,关于function是引用function Box(name,age){//new Function的唯一性this.name = name;//添加属性this.age = age;this.run = new Function("return this.name+this.age+'运行中....';");}var box1 = new Box('Lee',100);var box2 = new Box('Lee',100);console.log(box1.name==box2.name);//true 属性的值相等console.log(box1.age==box2.age);console.log(box1.run==box2.run);//false 方法其实也是一种引用地址console.log(box1.run()==box2.run());//true 方法的值相等,因为传参一致function Box(name,age){//创建一个对象,所有构造函数的对象其实就是Objectthis.name = name;//添加属性this.age = age;this.run = run;}function run(){//把构造函数内部的方法通过全局来实现引用地址一致return this.name+this.age+'运行中....';}var box1 = new Box('Lee',100);var box2 = new Box('Lee',100);console.log(box1.name==box2.name);//true 属性的值相等console.log(box1.age==box2.age);console.log(box1.run==box2.run);//true 方法其实也是一种引用地址console.log(box1.run()==box2.run());//true 方法的值相等,因为传参一致//通过使用全局函数保证了引用地址的一致性,但这种方法又带来了新的问题,//全局的this在对象调用时是Box本身,而当作普通函数调用的时候this又代表windowconsole.log(run());//出现了问题上述面向对象基础是以后学习原型的基础,需要好好理解。
1 0
- javaScript 面向对象-对象
- javascript 面向对象初探
- JavaScript 面向对象编程
- JavaScript 面向对象编程
- 面向对象的javascript
- javascript面向对象编程
- javascript的面向对象
- JavaScript的面向对象
- javascript面向对象开发
- 面向对象的JavaScript
- javascript 面向对象编程
- Javascript面向对象开发
- Javascript的面向对象
- JavaScript面向对象编程
- JavaScript 面向对象编程
- javascript面向对象实现
- 面向对象的JavaScript
- JAVASCRIPT - - 面向对象编程
- Mina框架研究(一)
- 自动部署服务器
- [C#] ZEBRA ZPL指令打印BarCode,QRCode
- 单机spark绑定端口
- 笔试题20. LeetCode OJ (6)
- javascript面向对象
- 分拆素数和
- Linux命令行:rmdir命令
- 稳定的奇偶数字排序
- Chrome浏览器的密码数据
- LeetCode 217 -Contains Duplicate ( JAVA )
- 【剑指 offer】(十三)—— 在 O(1) 时间删除链表结点
- PHP MVC架构
- UVa 201 Squares 枚举