面向对向的初体验

创建一个标签

// 传统
var p = document.createElement('p');
var txt = document.createTextNode('我是传统js创建的文字');
p.appendChild(txt);
document.body.appendChild(p); // 面向对象 (jquery方式) $('<p>我是jquery创建的标签</p>').appendTo('body');

面向对象的组织结构

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript"> var ybixian = { // 获得元素
getElem: {
tag: function (tag) { },
id: function (id) { }
},
// 设置样式相关
css: {
addStyle: function () { },
removeStyle: function() { },
addClass: function () {},
removeClass: function() {},
toggleClass: function() {}
} }; </script>
</head>
<body> <div>我是一个div</div> </body> <script type="text/javascript">
ybixian.tag( 'div' )[ 0 ].style.border = "1px solid red";
</script>
</html>

构造函数

// 描述一个人的构造函数

    function Person(pName, pAge, pSex) {
// 构造函数中不需要 return
// 为对象添加成员使用 this.成员名 = 值; 这里的this指的是调用者,
this.name = pName;
this.age = pAge;
this.sex = pSex;
this.handler = function () {
console.log('大家好,我叫:'+this.name+',今年: '+this.age+'岁了,')
} }
var p = new Person('tom', 20, '女');
p.handler(); //大家好,我叫:tom,今年: 20岁了, var p2 = new Person('tim', 27, '男');
p2.handler(); // 大家好,我叫:tim,今年: 27岁了,

原型对象与原型属性

  • 凡是函数就有属性 prototype
  • 由某一个函数 new 出来的对象,会自动链接到 该函数的 prototype
  • 凡是通过 new 出来的对象就有 _ _ proto_ _ (非标准)
function Fn(){}
var fn1 = new Fn();
// __proto__ 与 prototype 有什么区别?
// __proto__ 是站在对象的角度讨论其原型对象 (fn1)
// prototype 是站在构造函数的角度讨论原型属性, 或构造函数创建的对象的原型对象 ( Fn )

constructor属性

// 每一个对象都可以访问到一个属性
// 其中有一个是 constructor (构造器)
// 每一个对象的 constructor 属性描述的是其构造函数 function Fn(){}
var o = new Fn(); console.log(o.construtor === Fn); // true // 每一个对象都链接到 其 原型对象上
// 对象的 constructor 属性是其原型对象提供的

继承

  • 在js中有两种继承模型

    • 原型继承
    • 组合继承

组合继承

//  组合式继承
// 组合式继承将其他的对象中的成员加到自己身上 var o1 = {name: 'jim',age: 18,gender: '男'};
var o2 = {like: '打篮球'}; // 让o2 继承自 o1
// 将 o1 的成员加到 o2 上
for(var k in o1){
o2[k] = o1[k]
} // 由于 for in 循环中的对象可以随意的替代, 因此 o2 可以继承自任意的对象
// 因此, 这个继承方法称为组合式继承
// 这里希望 o2 可以继承自任意的对象. 所以为了简化继承的代码
// 给 o2 提供一个方法, 叫 extend
o2.extend = function ( obj ) {
for ( var k in obj ) {
this[ k ] = obj[ k ];
}
} o2.extend( o1 ); // 继承 o2.extend({
id: function( id ) { },
tag: function ( tag ) { },
showErr: function (msg) {
throw new Error( msg );
}
});
原型继承
// 原型继承
// 如果需要让一个对象有某一个行为(属性,方法),那么可以考虑将这个行为加到原型对象中,那么这个对象就继承自原型对象,获得该行为 // 什么是原型式继承
// 对象继承自其原型对象 // 所谓的原型式继承就是在 对象的 原型对象中加东西即可
// 如何使用原型对象
// 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 () {};
Person.prototype = {
constructor: Person,
sayHello: function() {},
sayGoodbye: function() {},
sayLove: function () {}
};

经典继承

var create = function( obj ) {
if ( Object.create ) {
return Object.create( obj );
} else { function F() {}
F.prototype = obj;
return new F();
}
} var obj = {name:'ybx',age:27};
var o = create ( obj );
console.log(o); // {__proto__{age:27,name:"ybx"}}

javascript面向对象学习(一)的更多相关文章

  1. JavaScript面向对象学习笔记

    JavaScript 常被描述为一种基于原型的语言 (prototype-based language)--每个对象拥有一个原型对象,对象以其原型为模板.从原型继承方法和属性.原型对象也可能拥有原型, ...

  2. javascript 面向对象学习(一)——构造函数

    最近在学习设计模式,找了很多资料也没有看懂,看到怀疑智商,怀疑人生,思来想去还是把锅甩到基础不够扎实上.虽然原型继承.闭包.构造函数也都有学习过,但理解得不够透彻,影响到后续提高.这次重新开始学习,一 ...

  3. javascript 面向对象学习(三)——this,bind、apply 和 call

    this 是 js 里绕不开的话题,也是非常容易混淆的概念,今天试着把它理一理. this 在非严格模式下,总是指向一个对象,在严格模式下可以是任意值,本文仅考虑非严格模式.记住它总是指向一个对象对于 ...

  4. javascript 面向对象学习(二)——原型与继承

    什么是原型? 首先我们创建一个简单的空对象,再把它打印出来 var example = {} console.log(example) 结果如下: { __proto__: { constructor ...

  5. javascript面向对象学习笔记——创建对象(转)

    工厂模式 该模值抽象了创建具体对象de过程.用函数来封装噫特定接口创建对象的细节. function createPerson(name,age,job){ var o=new Object(); o ...

  6. javascript面向对象学习

    1.this指向问题,指向的是当前的方法属于谁,当前的方法属于谁就指向谁!! 例子: oDiv.onclick = function () { this指向的是oDiv,因为这个方法属于oDiv } ...

  7. JavaScript之面向对象学习七(动态原型模式、寄生构造函数模式、稳妥构造函数模式创建自定义类型)

    一.动态原型模式 在面向对象学习六中的随笔中,了解到组合构造函数模式和原型模式创建的自定义类型可能最完善的!但是人无完人,代码亦是如此! 有其他oo语言经验的开发人员在看到独立的构造函数和原型时,很可 ...

  8. JavaScript学习笔记(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

  9. JavaScript学习总结(三)——this、原型、javascript面向对象

    一.this 在JavaScript中this表示:谁调用它,this就是谁. JavaScript是由对象组成的,一切皆为对象,万物皆为对象.this是一个动态的对象,根据调用的对象不同而发生变化, ...

随机推荐

  1. lnmp 环境下 部署 laravel 项目

    出现错误 Warning: require(): open_basedir restriction in effect. File(/xxxx/vendor/autoload.php) is not ...

  2. opencv的曲线拟合polyfit

    推荐一个不错的网页,可以直接用solve函数求解方程组: http://m.blog.csdn.net/u014652390/article/details/52789591 4.1 曲线拟合的最小二 ...

  3. Python学习之面向对象(一)

    第六章 面向对象 6.1 面向对象的初识 6.1.1 什么是面向对象 面向过程式编程: ​ 好处:出色的完成所有的需求 ​ 坏处:凡是更改或者增加一条需求,可能整个项目都随之改变 面向对象式编程: 类 ...

  4. Scratch少儿编程系列:(十一)Scratch编程之简单见解

    一.Scratch官网的说明     With Scratch, you can program your own interactive stories, games, and animations ...

  5. 【FFMPEG】网络流媒体协议

    目录(?)[-] RTP RTCP SRTP SRTCP RTSP RTSP 和RTP的关系 SDP RTMPRTMPS mms HLS RTP           参考文档 RFC3550/RFC3 ...

  6. ef Migration 的一些基础命令

    cmd ci 命令 dotnet ef migrations add NewColum --新增migrations dotnet ef database update--跟新数据库 dotnet e ...

  7. 暴力破解-H3C路由器-MSR900

    作者:zptxwd@gmail.com  最后修改日期2017年5月10日    转载请保留出处 声明,本文仅用于技术交流和学习,不得用于任何商业用途及违法行为.   所暴力破解的设备信息 华三路由器 ...

  8. bi的tableau

    参考: 官网: https://help.tableau.com/current/server-linux/zh-cn/get_started_server.htm 可视化分析最佳做法: 实用指南 h ...

  9. spring boot-11.全局捕获异常

    1.在Spring boot 中如果发生错误,浏览器访问会默认跳转到Whitelabel Error Page 这个错误页面,如果是客户端访问的话返回JSON格式的错误数据,说明spring boot ...

  10. 2017年0406------如何使用sessionStroage来储存参数是对象的,以及localStorage和sessionStorage的不同地方

    由于项目需要,需要向另外个页面传参数,,由于参数比较特殊,是对象,所以需要用到sessionStorage方法,下面简单的总结一下方法: (1)这个是要将对象转换成字符串,再存储到storage中, ...