面向对象

面向对象心得:

1. delete用法
语法:boolean delete 数据,指在当前作用域上删除数据
用法:
(1)删除数组中的一个元素
     
(2) 删除一个对象的属性或方法
     
(3)删除一个没有用var声明的变量

用法(1)
  Var arr = [1,2,3,4];
 
Console.log(arr);     //[1,2,3,4]
 
Console.log(arr.length);  //4
 
Var isTrue = delete arr[2];
 
Console.log(arr);//[1,2,3:4]
 
Console.log(arr.length);//4
 
用法(2)
  
Var o = {name:”jim”};
 
Var isTure = delete o.name;
 
Console.log(o.name);  //undefined
 
Console.log(o[name]);  //undefined
 
用法(3)
  
Var n = 1;
 m = 2;
  
Var isTure1 = delete n;
  
Var  isTure2 = delete m;
 
Console.log(isTure1);  //false
 
Console.log(isTure2);  //true
 
Console.log(n);   //1
 
Console.log(m);   //mdefined

2.  创建对象
Var
Person = function(name,age,sex){
    
This.name = name;
    
This.age = age;
    
This.sex = sex

}

Person.prototype.sayHello = function(){
    
Console.log(“1”);

}

Var p1 = new Person(‘tyy’,23,’女’);

Var p2 = new Person(‘thh’,24,’女’);

Console.log(p1);
Console.log(p2);


3.  原型对象于原型属性
__proto__与prototype有什么区别?

__proto__是站在对象的角度讨论其原型对象;

Prototype 是站在构造函数的角度讨论原型属性,或构造函数创建的对象的原型对象;

4. 关于继承

 面向对象的特征就是 封装性, 继承性 和 多态性
封装: 就是将复杂包裹, 隐藏起来, 让简单的东西预留在外面
继承: 拿来主义, 自己没有, 把别人的拿过来, 让其成为自己的
在 js 中有两种继承模型
1, 原型继承
2, 组合继承

1, 原型继承
// 如果需要让一个对象有某一个行为( 属性, 方法 ), 那么可以考虑将这个行为
// 加到原型对象中, 那么这个对象就继承自原型对象, 获得了该行为

2, 组合式继承
// 组合式继承将其他的对象中的成员加到自己身上

4.1  什么是原型式继承
对象继承自其原型对象,所谓的原型式继承就是在 对象的 原型对象中加东西即可
// 如何使用原型对象
     1, 利用对象的动态特性添加成员
       var o = {};
      o.name = 'jim';
      var Person = function () {};
      Person.prototype.sayHello = function () {
        alert (' 哈哈哈 ');
       };
此时 原型对象是对象, 可以利用动态特性随时添加成员
添加的成员都会被 构造函数创建的对象所继承
     2, 利用覆盖原型对象
      var Person = function () {};
      Person.prototype.sayHello = function () {
        alert (' 啦啦! ');
      };
       Person.prototype.sayGoodbye= function () {};
       Person.prototype.sayLove = function () {};
 //如果需要添加的内容非常多
        var Person = function () {};
        function Person() {}
        Person.prototype = {
        constructor: Person,
        sayHello: function() {},
        sayGoodbye: function() {},
        sayLove: function () {}
       };
// 这里由 Person 创建出来的对象什么类型?
// Object
// 为什么? 合理吗?
var p = new Person();
console.log( p.constructor.name );
        // 覆盖原型对象实现继承的时候, 一定要给新对象添加一个 constructor 属性
        // 以便模拟对象的类型. 但是如果对对象的类型要求不严格可以忽略

   3, 利用组合式继承添加原型成员
// 对象.extend( 对象 ) 

在实际开发中, 如果希望获得一个继承自 对象 o 的对象

   可以使用 Object.create 方法,ES5 提供的方法
 // 新对象 Object.create( 作为原型对象的对象 )

var o1 = { name: 'jim' };
var o2 = Object.create( o1 );
// 明确函数调用语法,功能是什么?
// 它会创建一个新对象, 让他继承自参数 对象
// 创建新对象就有构造函数
// 继承对象就有原型对象


function create( obj ) {
function F() {}
// 要有继承
F.prototype = obj;
return new F();
}
var o3 = create( o1 );
// 在实际开发中, 如果是为了兼容所有的浏览器, 有两种做法
// 1, 在原生对象中提供方法
if ( !Object.create ) {
Object.create = function ( obj ) {
function F() {}
// 要有继承
F.prototype = obj;
return new F();
}
}

var o4 = Object.create( o1 );

var _ = 0;
// 2, 统一用新的方法
var create = function( obj ) {
if ( Object.create ) {
return Object.create( obj );
} else {

function F() {}
F.prototype = obj;
return new F();
}
}


var o5 = create ( obj );
//小总结:
// 无论浏览器是否支持该方法, 都应该使用自己定义的方法来完成, 但是
// 在方法内部, 判断浏览器是否具有该功能, 如果有该功能
// 则使用浏览器提供 的功能
// 如果浏览器不支持该功能, 则自己实现
6.
// 继承的语法有几种, 分别是什么?
//1.原型式继承: //2.组合式继承
//1.利用对象的动态特性添加 2. 利用覆盖原型对象 3.利用组合式继承添加原型成员
obj.prototype.method1 =function(){}
obj.prototype.method2 =function(){}

obj.prototype = {
method1= function(){}
method2 = function(){}
}

obj2.extend(obj1);
posted @ 2016-08-15 15:26  英子princess  阅读(100)  评论(0)    收藏  举报