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. 自定义HtmlHelper扩展方法

    核心:通过TagBuilder类实现Html元素的创建 TagBuilder: 前台调用: @Html.Messger("tag","span-tag", @V ...

  2. 02_Spring Bean的装配模式_基于XML配置方式

    一.三种实例化Bean的方式 1.使用类构造器实例化(默认无参数) <bean id="bean1" class="com.demo1.Bean1"> ...

  3. Charles的https抓包方法及原理/下载ssl/http证书

    本文的Charles,适应windows/MAC/IOS/Android,避免抓包HTTPS失败和乱码: charles如果不配置SSL通用证书: 会导致HPPTS协议的域名抓取失败/乱码的现象: 首 ...

  4. PKU OJ A Bug's life

    http://bailian.openjudge.cn/tm2018/G/ #include <iostream> #include <vector> #include < ...

  5. Markdown的入门教程,非常的使用

    原文链接: https://www.jianshu.com/p/20e82ddb37cb 链接地址  点我      粘贴进来的内容竟然没有图片,好气呦 目录 概述 简介 官方文档 Markdown编 ...

  6. Leetcode279. Perfect Squares完全平方数

    给定正整数 n,找到若干个完全平方数(比如 1, 4, 9, 16, ...)使得它们的和等于 n.你需要让组成和的完全平方数的个数最少. 示例 1: 输入: n = 12 输出: 3 解释: 12 ...

  7. redies安装

    第一步下载redies 下载地址:https://github.com/microsoftarchive/redis/releases 第二步修改文件夹名为redies 第三步运行redies 打开一 ...

  8. 编译安装Python3.6.1

    系统:CentOS 7 Python: 3.6.1 去官方网站下载Python的源码包 然后准备开发环境和服务器平台开发 注意:python编译还依赖一个zlib-devel(本人第一次编译就因为不知 ...

  9. SyntaxError: Non-ASCII character ‘xe5’ in file 04.py on line 4, but no encoding declared

    出现问题的原因:程序中的编码错误,python默认是acii模式,没有支持utf8,代码中需要输出汉字,所以报错. 解决办法:源代码文件第一行添加:#coding:utf-8 -- coding: U ...

  10. PipeCAD 简介

    PipeCAD 简介 PipeCAD的定位是中小型项目的管道设计软件,主要有管道建模.设备建模以及管道ISO图及平面图功能.程序的操作方式尽量参考PDMS,考虑灵活性.易于使用.如果用来和国内其他管道 ...