月度归档 九月 2019

通过seo圣人

js中this的四种调用模式详解

js中this的四种调用模式主要分为方法调用模式、函数调用模式、构造器调用模式和(apply、call、bind)调用模式。

第一种:方法调用模式 (也就是用.调用的)this就是这个对象本身

当一个函数被保存为对象的一个属性时,我们称它为一个方法,当一个方法被调用时,this被绑定到该对象,如果一个调用表达式包含一个属性表达式(即一个.点表达式或者[subscript]下标表达式)那么它被当做一个方法调用。

    var myObject = {
        value:0;
        increment:function(inc){
            this.value + = typeof inc === 'number'?inc:1;
        }
    }
    myObject.increment();
    document.writeln(myObject.value);//1
    myObject.increment(2);
    document.writen(myObject.value;)

方法可以使用this去访问对象,所以它能从对象中取得或修改该对象,this到对象的绑定发生在调用它的时候,这个超级“迟绑定”(very later binding)使用函数可以对this高度复用,通过this可取得它们所属对象的上下文的方法称为公共方法。

第二种:函数调用模式


当函数并非一个对象的属性时,那么它被当做一个函数来调用:

var sum = add(3,4);

当函数以些模式调用时,this被绑定到全局对象,这是语言设计上的一个错误,如果语言设计正确,当内部函数被调用时,this应该仍然绑定到外部函数的this对象,这个错误设计的后果就是方法不能利用内部函数来帮助它工作,因为内部函数的this被绑定了错误的值,所以不能共享该方法对对象的访问权,有一个很容易的解决办法如果该方法定义一个变量并给它赋值为this,那么内部函数就可以通过这个变量来访问到this。

    //给myObject增加一个double方法
    myObject.double = function(){
        that = this; 
        var helper = function(){
            that.value = add(that.value,that.value);
        }
        helper();以函数的形式来调用helper
    }
    //以方法的形式来调用double
    myObject.double();
    document.wtiten(myObject.getValue());//6

第三种:构造函数调用模式

    var Class = function(){
        this.value = 100;
    }
    var class = new Class();
    console.log(class.value); //100

我们通过new关键字来调用构造函数,此时this会绑定在该新对象上(也就是这个实例对象上)

第四种:apply和call以及bind的调用模式:指定绑定对象

    var myObject = {value:100};
    var foo = function(){
        console.log(this);
    };
    foo(); //global
    foo.apply(myObject);//{value:100}
    foo.call(myObject);//{value:100}
    var newFoo = foo.bind(myObject);
    newFoo(); //{value:100}

apply()方法接受两个参数第一个是函数运行时的作用域,另一个是参数的数组(arguments)

call()方法第一个参数与apply是一样的,第二个参数需要一个个列举出来

call方法更接近我们平时调用函数,而apply需要我们传递 Array形式的数组做为参数,它们是可以相互转换的。

通过seo圣人

没有经历煎熬是不会有结果的

人的一生没有随随便便的成功,更不会有一帆风顺的好事,哪些成功人士都有着不为人知的经历和心酸,写此文也是因为看了一条朋友圈。

这条朋友圈的原文是这样写的,经过煎熬油炸之后才会有美味的出现,才会有佳肴的产生!人生何尝不是这样呢?发生在我们身边的和我们自己身上的又何尝不是这样呢?

人的一辈子都在经历不停的煎熬与加油中,从你出生的那一刻,你便走出了成功的第一步!几个亿的精子赛跑,唯有你进去了,然后通过10个月的生长,再从生命通道来到这个世上!

从上学的那一刻开始,我们开启了人生的第一段煎熬历程,不断学习进步,不断吸收新鲜的知识,不断的改变自己,不断的加油,中考,高考,大学毕业,然后踏入社会在职场中厮杀。。。

通过seo圣人

mysql和mssql创建数据表的方法

现在数据库工具很多,无论是mysql还是mssql,都有很多对应的工具,这也导致了现在很多技术员只会使用工具创建数据表,离开工具就什么都干不了了,今天我就是给大家讲讲,不用工具,怎样创建数据表。

创建一个数据表,这里面肯定有数据表名、字段、字段类型以及长度,基本就这些,这里我假设数据表名为dobunkan_a,字段有id、name、tel三个字段,我们先用sqlserver命令创建这个表。

CREATE TABLE [dbo].[dobunkan_a]
(
    [id] [tinyint] IDENTITY(1,1) NOT NULL,
    [name] [nvarchar](max) NOT NULL DEFAULT (N'无'),
    [tel] [nvarchar](max) NOT NULL DEFAULT (N'无'),
    PRIMARY KEY ([id])
)

现在我们在mysql下创建这样一个表:

CREATE TABLE IF NOT EXISTS `dobunkan_a`(
--创建数据表
--create table if not exists `表名`(
--如果不用IF NOT EXISTS,创建同名的表就会报错。

   `id` INT UNSIGNED AUTO_INCREMENT,
--`字段名` 字符类型 AUTO_INCREMENT 定义id列为自增的属性,一般用于主键,数值会自动加1。

   `name` VARCHAR(100) NOT NULL,
--字段名为name,字段类型为VARCHAR,长度为100,不允许为空
   
   `tel` VARCHAR(40) NOT NULL,

   PRIMARY KEY ( `id` )
--PRIMARY KEY关键字用于定义列id为主键。 您可以使用多列来定义主键,列间以逗号分隔。

)ENGINE=InnoDB DEFAULT CHARSET=utf8;
--ENGINE 设置存储引擎,CHARSET 设置编码。

到这里为止,mysql和sqlserver数据表的建立和字段的设置就完成了。

通过seo圣人

wordpress404页面在宝塔面板下失效的解决方法

换了服务器环境之后,把wordpress也移植过去了,新服务器环境是用宝塔面板搭建的,发现访问遇到404页面的时候直接提示的是“404 not found”,那么宝塔自带的404页面和wordpress自带的404页面都失效了。

因为我们做SEO的人非常在意这些细节,经过一番思索,终于找到了解决办法,原因是我们把宝塔默认的404页面删除了,这就导致了宝塔的404页面没有显示,而宝塔面板nginx规则指向的是宝塔的404页面,这样一来二去的,无论是宝塔的404页面还是wordpress的404页面都不显示了,找到问题就好办了,我的做法很简单,去修改nginx配置文件,把宝塔面板指向的404注释掉,问题就得到解决了。

在宝塔面板后台找到你的网站,点设置,然后点配置文件,找到下面的代码,注释即可。

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
//找到下面两行代码,在代码前加“#”注释掉,保存,重启nginx即可。
    #error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

好了,到这里,问题全部解决,最后你在去检查下404页面的返回状态码是否正确。

通过seo圣人

用php读取帝国CMS字段

相信很多人在使用帝国CMS的时候都遇到过同样的问题,用帝国默认的标签无法满足需求,比如,某标签读出来是一个带a标签的字符串,这时候我只想要其中的部分资料怎么办?

比如:帝国CMS文章模板里面有一个标签是[!–writer–],他调用出来的结果是这样的:

<a href="">作者名字</a>

但是我们的需求只需要作者名字,应该怎么办呢?其实帝国CMS里面有一个数组,你直接使用就是了,请看下面的例子:

<?php
//echo $navinfor[字段名称];
echo $navinfor[writer];

?>

其实变量navinfor支持的字段有下面这些:

主标题、副标题等等[!–title–]、[!–ftitle–]、[!–newstime–]、[!–titlepic–]、[!–smalltext–]、[!–writer–]、[!–befrom–]、[!–newstext–]、[!–diggtop–]。像上面的方法一样使用就行了。

通过seo圣人

IOS12被移植到了小米手机上

在微信公众号看到了一篇名为《我给小米4,装上了iOS 12,流畅得不要不要的》的这样一篇文章,后来发现居然是在小米手机上面装模拟器,然后在模拟器里面安装苹果手机的IOS系统,全文如下:

要是有人问哪里有800块钱的“iPhone”卖,相信大家跟木木一样,第一时间想起华强北。

熟悉的重量,熟悉的外形,熟悉的手感。

不同的是,华强北大部分“iPhone”都是用着苹果的外壳,安卓的系统。

这些手机被统称为,只抄袭外表的低段位“山寨机”。

而真正高段位的山寨机,是能直接抄袭品牌“灵魂”的,是山寨中的战斗机。

最近苹果就被高段位的山寨弄得一身骚,苹果整个iOS系统被一家叫Corellium的公司复制走了…

Corellium是什么


Corellium是一款iOS虚拟机(模拟器),由Chris Wade开发,他是最早的iPhone越狱者之一,对于iPhone和iPad等iOS产品的系统底层,了如指掌。

简单来说,Corellium是一个什么都能复制的系统,什么iOS、安卓、Windows都能完美复制。

跟我们在华强北看到的山寨iPhone完全不一样,Corellium经过多年研发,已经可以把iOS移植到安卓手机上了。

看一下小米用着iOS系统,是不是不敢相信自己的眼睛了!

这个复制的iOS系统,无论UI界面、以及图标和代码等方面与正版iOS一样,并且还能在AppStore上下载运行App,强的一批。

而且最重要的是,创建一个全新的任意版本越狱后的虚拟iPhone设备,只需要几分钟,还有网友公布了刷机方法。


 iOS刷机过程

使用Corellium,用户可以在电脑上调出一台虚拟iPhone。

然后创建一台虚拟设备,从iPhone 6到iPhone X都能刷出来。

后面还可以选iOS 10~iOS 12的版本可以选择。

甚至,可选是否越狱…也就是说这个iOS版本一刷出来,就是完美的版本。

还可以设置iOS内核启动的选项(类似macOS),设置自定义的内核。要知道iOS的内核是不对外公开的,别问这个软件怎么做到的,木木也不知道。

而最夸张的是,还能设置任意的一个Device ID或者Chip ID,这两个ID是iOS所有重要随机数的ID。

而改了这些ID号,就变成一台全新的iOS设备了。

如果修改的号码是别人的设备正在使用的,等于盗用了别人iOS产品的出生证…

想知道手机版本的真伪

关注“科技每日推送”

在主页点击“查”-“手机真伪查询”

即可免费鉴定你的手机型号和真伪喔

最后,启动系统,这时还可以用鼠标控制手机,选择用ssh或者lldb的方式连接设备。

通过ssh连接设备后,就拥有了root权限,并且可以执行一些基本的命令行指令。

只要将第3步中的boot without snapshot mount选中,再重启一下就可以对根目录进行可读可写的挂载了。

成功后,安装和运行应用也没有什么大问题,用淘宝购买东西更是没有问题。

一个iOS能放到安卓手机,还能正常使用,突然多了个孪生兄弟,不把苹果吓尿才怪。

iOS作为iPhone的核心优势,就这样被玩坏了,以后还怎么称霸手机市场啊,这么一闹苹果终于坐不住了。

苹果一怒之下把Corellium给告了…

苹果表示支持“善意的安全研究”,为任何发现iOS系统缺陷的人提供最高100万美元的“漏洞奖励”,并为“合法”的研究人员提供定制版本的iPhone。

但是Corellium的做法越界了,未经许可的情况下复制苹果的iOS,并获取不法利益。苹果表示Corellium不加区分地将Corellium苹果产品推销给任何客户,包括外国政府和商业企业。

只要用户每年支付100万美元,Corellium便会向客户复制产品的“私人”内容。

所以苹果要求Corellium立即停止这样做,还要给苹果赔钱。

是的,你们没看错,要使用这个刷机系统和得到想知道的私人信息,你首先得先努力工作存够100万美元…

而面对苹果这个指控,Corellium也来了个佛系回复:“尊重他人的知识产权,并希望其用户也这样做。”

这个,果然高手过招,都是回答了像没回答一样。

说实话,木木认为苹果最值钱的就是iOS系统,如果iOS能被随便用,还能无卡顿运行,那么苹果似乎价值并没这么大。

要是有一天真的普及了iOS系统,你们还会选择iPhone吗?

通过seo圣人

帝国CMS样式交替的写法

今天一个朋友有一个需求,哪就是样式交替,他网站后台用的是帝国CMS,可能是因为对这套系统了解的不够全面,在实现一些特殊需求的时候遇到了困难。

在为他解决问题的同时,我也想把解决方案分享出来,一来是自己做个笔记,而来是方便大家,下面我们直接进入正题。

他的需求是这样的:

<a class="a1" href="https://ask.dobunkan.com">网站优化</a>
<a class="a2" href="https://www.dobunkan.com">学课网</a>
就是a1和a2两个样式在循环列表中如此反复交替的出现。

思路:
如果是这样交替出现 ,我们其实可以利用判断来实现,因为帝国CMS模板是支持PHP语句的,而且帝国CMS里面还带有一个计数的标签,这个标签就是$bqno,他是从第一次循环后面一直加1,有了这样的标签,问题就好解决了,我们可以判断当这个变量的值为能整除2的时候,样式等于a2,当样式不能整除2的时候,样式等于a1,下面我们直接上代码:

[e:loop={3,6,0,1}]

<a class="<? if($bqno==1){?>a1<? }else{ ?>a2<? } ?>" href="https://ask.dobunkan.com">网站优化</a>

[/e:loop]

到这里,问题很轻松的就解决了。是不是很简单,如果有需求的需求,用这样的方法也是可以解决的。希望本文能够对你有所帮助。