面向对象总结

//基本的面向对象程序
function Aaa(){
this.name = '小明';
}
Aaa.prototype.showName = function(){
alert( this.name );
};
var a1 = new Aaa();
a1.showName();




//在JS源码 : 系统对象也是基于原型的程序
function Array(){
this.lenglth = 0;
}
Array.prototype.push = function(){};
Array.prototype.sort = function(){};



//尽量不要去修改或者添加系统对象下面的方法和属性
var arr = [1,2,3];
Array.prototype.push = function(){
//this : 1,2,3
//arguments : 4,5,6
for(var i=0;i<arguments.length;i++){
this[this.length] = arguments[i]
}
return this.length;
};




//包装对象 : 基本类型都有自己对应的包装对象 : String  Number  Boolean
String.prototype.charAt = function(){};
str.charAt(0);  基本类型会找到对应的包装对象类型,然后包装对象把所有的属性和方法给了基本类型,然后包装对象消失


var str = 'hello';
str.number = 10;基本类型找到了包装对象,定义了属性,但是包装对象随后消失
alert( str.number );  undefined  这会找到的包装对象是新的对象




//原型链 : 实例对象与原型之间的连接,叫做原型链
原型链的最外层 : Object.prototype

a1      _proto_         Aaa.prototype     _proto_       Object.prototype

function Aaa(){
this.num = 20;
}
Aaa.prototype.num = 10;
Object.prototype.num = 30;

var a1 = new Aaa();




//hasOwnProperty : 看是不是对象自身下面的属性,这个方法挂在Object.prototype.hasOwnProperty 下面
var arr = [];
arr.num = 10;自身
Array.prototype.num2 = 20;原型

alert(  arr.hasOwnProperty('num')  );  //true
alert(  arr.hasOwnProperty('num2')  );  //false




//constructor : 查看对象的构造函数
function Aaa(){

}
var a1 = new Aaa();
alert( a1.constructor );  //Aaa

var arr = [];
alert( arr.constructor == Array );  //true


function Aaa(){
}
每一个函数创建的时候自动生成constructor挂在原型下面
Aaa.prototype.constructor = Aaa; 


function Aaa(){
}
Aaa.prototype.name = '小明';
Aaa.prototype.age = 20;
//这种误操作,因为对象的引用,重新赋值,导致新的{}的constructor=Object
Aaa.prototype = {
name : '小明',
age : 20
};
//正确的写法
Aaa.prototype = {
constructor:Aaa,
name : '小明',
age : 20
};




//instanceof : 实例对象与构造函数在原型链上是否有关系  
实例对象a1      构造函数Aaa    构造函数Object
function Aaa(){
}
var a1 = new Aaa();
alert( a1 instanceof Aaa );  //true
alert( a1 instanceof Object );  //true




//toString() 把对象转成字符串
系统对象下面都是自带的  系统对象 Array  
arr.toString==Array.prototype.toString
arr.toString == Object.prototype.toString //false
自己写的对象都是通过原型链找object下面的
var a1 = new Aaa();
a1.toString == Object.prototype.toString //ture


[1,2,3].toString()  //'1,2,3'*/

数字的16进制转换
var num = 255;
alert( num.toString(16) );  //'ff' 


//跨frame类型判断错误  constructor instanceof
var ifArray = window.frames[0].Array;
var arr = new ifArray();

alert( arr.constructor == Array );  //false
alert( arr instanceof Array );  //false
alert( Object.prototype.toString.call(arr) == '[object Array]' );  //true  


类型判断--判断数组的最好方法  
var arr = [];
Object.prototype.toString.call(arr) == '[object Array]' 




//继承 : 子类不影响父类,子类可以继承父类的一些功能 ( 代码复用 )
属性的继承 : 调用父类的构造函数 call
方法的继承 : for in :  拷贝继承 (jquery也是采用拷贝继承extend)

function CreatePerson(name,sex){   //父类
this.name = name;
this.sex = sex;
}
CreatePerson.prototype.showName = function(){
alert( this.name );
};

function CreateStar(name,sex,job){  //子类
//属性的继承 
CreatePerson.call(this,name,sex);
this.job = job;
}
//CreateStar.prototype = CreatePerson.prototype; 方法的继承
extend( CreateStar.prototype , CreatePerson.prototype );

function extend(obj1,obj2){
for(var attr in obj2){
obj1[attr] = obj2[attr];
}
}




//类 : JS是没有类的概念的 , 把JS中的构造函数看做的类----类式继承

function Aaa(){   //父类
this.name = [1,2,3];
}
Aaa.prototype.showName = function(){
alert( this.name );
};

function Bbb(){   //子类
}

//直接实例化构造函数赋给子类的构造函数的原型;
Bbb.prototype=new Aaa();
问题1
子类的构造函数是父类需要修改一下:  Bbb.prototype.constructor=Bbb;
问题2
子类实例对象操作属性name, 会影响到下一次子类实例对象的属性值 name;

正确办法: 属性和方法分开继承


属性继承:  在子类构造函数里面执行父类构造函数,并且修改this 指向
function Bbb(name){   //子类
Aaa.call(this,name)
}
方法继承: 采用中间对象 中转
var mid=function(){};
mid.prototype=Aaa.prototype;
Bbb.prototype=new mid();



//原型继承
var a = {
name : '小明'
};

function cloneObj(obj){
var F = function(){};
F.prototype = obj;
return new F();
}
var b = cloneObj(a);
b.name = '小强';

拷贝继承:  通用型的  有new或无new的时候都可以
类式继承:  new构造函数
原型继承:  无new的对象





































































一、综合实战—使用极轴追踪方式绘制信号灯 实战目标:利用对象捕捉追踪和极轴追踪功能创建信号灯图形 技术要点:结合两种追踪方式实现精确绘图,适用于工程制图中需要精确定位的场景 1. 切换至AutoCAD 操作步骤: 启动AutoCAD 2016软件 打开随书光盘中的素材文件 确认工作空间为"草图与注释"模式 2. 绘图设置 1)草图设置对话框 打开方式:通过"工具→绘图设置"菜单命令 功能定位:该对话框包含捕捉、追踪等核心绘图辅助功能设置 2)对象捕捉设置 关键配置: 启用对象捕捉(F3快捷键) 启用对象捕捉追踪(F11快捷键) 勾选端点、中心、圆心、象限点等常用捕捉模式 追踪原理:命令执行时悬停光标可显示追踪矢量,再次悬停可停止追踪 3)极轴追踪设置 参数设置: 启用极轴追踪功能 设置角度增量为45度 确认后退出对话框 3. 绘制信号灯 1)绘制圆形 执行命令:"绘图→圆→圆心、半径"命令 绘制过程: 使用对象捕捉追踪定位矩形中心作为圆心 输入半径值30并按Enter确认 通过象限点捕捉确保圆形位置准确 2)绘制直线 操作要点: 选择"绘图→直线"命令 捕捉矩形上边中点作为起点 捕捉圆的上象限点作为终点 按Enter结束当前直线命令 重复技巧: 按Enter可重复最近使用的直线命令 通过圆心捕捉和极轴追踪绘制放射状直线 最终形成完整的信号灯指示图案 3)完成绘制 验证要点: 检查所有直线是否准确连接圆心和象限点 确认极轴追踪的45度增量是否体现 保存绘图文件(快捷键Ctrl+S)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值