js的面向对象开发能力较弱,基本是以prototype为核心的面向对象,虽然现在出了个class这玩意,但本文还是先不做探讨。

面向对象基础——构造函数方法

var Fly = function (speed) {
this.power = "i can fly";
this.speed = speed+"km/h";
this.init = function(){
console.log(" i will fly and my speed is "+this.speed);
}
}
var plane = new Fly(1000)
plane.init()

至此我们便构建出了一个简单的对象plane是一个 new Fly();

那么我们想要拓展怎么办

面向对象实现的基础——prototype

Fly.prototype.sayPower = function(){
console.log(this.power)
}

由此我们便给他添加了一个新的方法叫做sayPower();同样可以在plane中调用。

一个一个的添加非常麻烦,要添加好多那么应该怎么办

Fly.prototype = {
type:"波音747",
saySpeed:function(){
console.log(this.speed)
},
sayType:function(){
console.log(this.type)
}
}

我们调用了一个对象指向了他的prototype,但是这是我们执行plane.sayPower()会发现这个方法是没有的,因为他被后来的覆盖了

constuctor指向

上面那种方法还有一个问题就是指向变了,指向就是plane的构造者,plane.constructor变成了Object();

所以我们应该加一行

Fly.prototype = {
constructor:Fly,
type:"波音747",
saySpeed:function(){
console.log(this.speed)
},
sayType:function(){
console.log(this.type)
}
}

JQuery中的链式实现方法

神奇的jQuery实现了链式调用的原理就是在不要求返回特定值时一直返回本身

(function (){
var jQuery = function(selector){
return new Obj(selector)
}//创建一个对象
var Obj = function (selector){
this.init(selector)
}//创建时这个对象初始化一个方法
Obj.prototype = {
length:,
constructor:jQuery,
init:function(selector){
var elem;
elem = document.querySelectorAll(selector);
for(var i=;i<elem.length;i++){
this[i] = elem[i];
}
this.length = elem.length;
return this  //初始化的时候会返回一个本身,然后创建一个hash数组
},
css:function(attr,value){
for(var i=;i<this.length;i++){
this[i].style[attr] = value;
}
return this  //遍历自己的hash,给添加样式
}
}
window.$ = window.jQuery = jQuery
})();
$(".box").css("background","#f93")

还有一种神奇的方法

(function (){
var jQuery = function(selector){
return new jQuery.prototype.init(selector)
}
jQuery.prototype = {
length:,
constructor:jQuery,
init:function(selector){
var elem;
elem = document.querySelectorAll(selector);
for(var i=;i<elem.length;i++){
this[i] = elem[i];
}
this.length = elem.length;
return this
},
css:function(attr,value){
for(var i=;i<this.length;i++){
this[i].style[attr] = value;
}
return this
}
}
jQuery.prototype.init.prototype = jQuery.prototype //在这里都连起来
window.$ = window.jQuery = jQuery
})();
$(".box").css("background","#f93")

js面向对象开发基础的更多相关文章

  1. 新手如何理解JS面向对象开发?

    今天有时间讲讲我对面向对象的理解跟看法,尽量用通俗的语言来表达,多多指教! 如今前端开发已经越来越火了,对于前端开发的要求也是越来越高了,在面试中,经常有面试官会问:你对JS面向对象熟悉吗? 其实,也 ...

  2. 原生js日历选择器,学习js面向对象开发日历插件

    在web开发过程中经常会碰到需要选择日期的功能,一般的操作都是在文本框点击,然后弹出日历选择框,直接选择日期就可以在文本框显示选择的日期.开发好之后给用户使用是很方便,但如果每一个日历选择器都要临时开 ...

  3. 云笔记项目-补充JS面向对象编程基础知识

    简单介绍: 此部分知识为在做云笔记项目中补充,因为云笔记项目中涉及到前端js,里面写了很多js脚本,用到了创建js属性和方法,在js中直接声明的属性和方法最终都会变成window的对象,即其成为了全局 ...

  4. JS OOP -01 面向对象的基础

    JS面向对象的基础: 1.用定义函数的方式定义类 2.用new操作符获得一个类的实例 3.使用 [ ] 引用对象的属性和方法 4.动态添加,修改,删除对象的属性和方法 5.使用 { } 语法创建无类型 ...

  5. JS面向对象使用面向对象进行开发

      面向对象基础一之初体验使用面向对象进行开发 对 JS 中的面向对象的基础进行讲述, 初体验使用面向对象进行开发 主要内容是 面向对象的概念及特性 用面向对象的方式解决简单的标签创建实例 一些基础的 ...

  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十五 ║Vue基础:JS面向对象&字面量& this字

    缘起 书接上文<从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 十四 ║ VUE 计划书 & 我的前后端开发简史>,昨天咱们说到了以我的经历说明的web开发经历的 ...

  7. Python自动化 【第七篇】:Python基础-面向对象高级语法、异常处理、Scoket开发基础

    本节内容: 1.     面向对象高级语法部分 1.1   静态方法.类方法.属性方法 1.2   类的特殊方法 1.3   反射 2.     异常处理 3.     Socket开发基础 1.   ...

  8. JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)

    函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) {             return i1 + i2;//如果不写return返回 ...

  9. JavaScript 面向对象开发知识基础总结

    JavaScript 面向对象开发知识基础总结 最近看了两本书,书中有些内容对自己还是很新的,有些内容是之前自己理解不够深的,所以拿出来总结一下,这两本书的名字如下: JavaScript 面向对象精 ...

随机推荐

  1. fastjson中List和JSONArray的相互转换

    https://blog.csdn.net/xiaofei__/article/details/89571320 (1)List转换为JSONArray List<T> list = ne ...

  2. centos7 yum 安装tomcat7

    查看yum中tomcat信息 yum info tomcat 安装 yum install tomcat 安装管理界面 yum install tomcat-webapps tomcat-admin- ...

  3. 微信小程序 拼团商品倒计时(拼团列表、拼团商品详情)

    直接上图: 拼团列表.拼团详情-倒计时                                    //单个倒计时,适用用于单个商品的倒计时 js文件: //倒计时 function cou ...

  4. TensorFlow实战Google深度学习框架-人工智能教程-自学人工智能的第二天-深度学习

    自学人工智能的第一天 "TensorFlow 是谷歌 2015 年开源的主流深度学习框架,目前已得到广泛应用.本书为 TensorFlow 入门参考书,旨在帮助读者以快速.有效的方式上手 T ...

  5. 系统负载load

    一.查看系统负荷 如果你的电脑很慢,你或许想查看一下,它的工作量是否太大了. 在Linux系统中,我们一般使用uptime命令查看(w命令和top命令也行).(另外,它们在苹果公司的Mac电脑上也适用 ...

  6. Python中的urlparse、urllib抓取和解析网页(一)

    对搜索引擎.文件索引.文档转换.数据检索.站点备份或迁移等应用程序来说,经常用到对网页(即HTML文件)的解析处理.事实上,通过Python 语言提供的各种模块,我们无需借助Web服务器或者Web浏览 ...

  7. 廖雪峰Java11多线程编程-1线程的概念-5中断线程

    1.中断线程: 如果线程需要执行一个长时间任务,就可能需要中断线程.场景:从网络上下载一个100M的文件,用户在下载过程中中断下载任务的执行. 中断线程就是其他线程给该线程发一个信号,该线程收到信号后 ...

  8. HZOI20190902模拟35题解

    题面: A:公园 DAG上想拓扑dp 然而博主记忆化搜索了一下 设f[i][j]表示从i节点走j个点出公园所用的最小时间 则$f[u][i]=min(f[v][j-1]+dis_{u,v})$; 然后 ...

  9. xcode下的DerivedData

    在模拟器运行的情况下经常会出现以下的错误: error: remove /Users/mac/Library/Developer/Xcode/DerivedData/YuQing-amkrrucjrn ...

  10. centos7如何配置yum仓库

    centos7如何配置yum仓库 一.总结 一句话总结: 备份原仓库配置原件,接来下按需求 百度 是指定本地光盘作为yum仓库,还是使用网络源作为yum仓库 二.centos7如何配置yum仓库 1. ...