js 高级函数 之示例
js 高级函数
作用域安全构造函数
function Person(name, age)
{
this.name = name;
this.age = age;
}
var person1 = Person("lin3615", 26);
//alert(window.name); // lin3615
alert(person1.name); // 出错,此时成了全局的了
========================
function Person(name, age)
{
this.name = name;
this.age = age;
}
var person1 = new Person("lin3615", 26);
//alert(window.name); // 为空
alert(person1.name); // lin3615
================
为了防止没有使用 new 时实例化,出现跨域,可用以下方法
function person(name, age)
{
if(this instanceof person)
{
this.name = name;
this.age = age;
}else
{
return new person(name,age);
}
}
var person1 = person("lin3615", 26);
//alert(window.name); // 为空
alert(person1.name); // lin3615
=========================
以下代码中 Polygon 构造函数是安全的,然后 Rectangle 构造函数则不是,一个 Rectangle 实例之后,这个实例应该通过
Polygon.call() 来继承 Polygon 的 sides 属性。但由于 Polygon
构造函数是作用域是安全的, this 对象并非 Polygon 的实例。所以
会创建并返回一个新的 Polygon 对象
function Polygon(sides)
{
if(this instanceof Polygon)
{
this.sides = sides;
this.getArea = function (){
return 0;
};
}else
{
return new Polygon(sides);
}
}
function Rectangle(width, height)
{
Polygon.call(this, 2);
this.width = width;
this.height = height;
this.getArea = function(){
return this.width *
this.height;
};
}
var rect = new Rectangle(5, 10);
alert(rect.sides); // undefined
如果结合原型链则可以解决这个问题
function Polygon(sides)
{
if(this instanceof Polygon)
{
this.sides = sides;
this.getArea = function (){
return 0;
};
}else
{
return new Polygon(sides);
}
}
function Rectangle(width, height)
{
Polygon.call(this, 2);
this.width = width;
this.height = height;
this.getArea = function(){
return this.width *
this.height;
};
}
Rectangle.prototype = new Polygon();
var rect = new Rectangle(5, 10);
alert(rect.sides); // 2
js 高级函数 之示例的更多相关文章
- js高级-函数的四种调用模式
1.对象方法调用模式 方法内部的this指向当前调用者的对象d 定义类 (构造函数) function Dog (dogName){ //创建一个空对象 让空对象==this this.name ...
- js高级-函数变量提升
var a = 10; function f1(){ console.log(a) //undefined 函数变量提升了 函数执行之前想创建了函数的EC 把函数里面声明的变量初始化undefine ...
- JS高级——函数的调用模式
函数调用模式一共有四种 <script> //1.函数模式 //this指向window全局对象 //2.方法模式 //this指向调用这个方法的对象 //3.构造函数模式 //this ...
- JS高级 — 函数中的this指向问题
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JS高级 — 函数的声明和表达式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- JS高级---函数作为返回值使用拓展,排序
函数作为返回值使用拓展,排序 排序, 每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序 函数作为返回值 函数作为参数 //排序,每个文件都有名字,大小,时间,都可以按照某个属性的值进行排序 ...
- JS高级---函数作为参数使用
函数作为参数使用 var arr = [1, 100, 20, 200, 40, 50, 120, 10]; //排序 arr.sort(); console.log(arr); 排序---函数作为参 ...
- JS高级---函数作为返回值使用
函数作为返回值使用 function f1() { console.log("f1函数开始"); return function () { console.log("函数 ...
- JS高级---函数的几个成员
函数的几个成员 函数中有一个name属性----->函数的名字, name属性是只读的, 不能修改 函数中有一个arguments属性--->实参的个数 函数中有一个length属性--- ...
随机推荐
- Shell脚本语言与编译型语言的差异
大体上,可以将程序设计语言可以分为两类:编译型语言和解释型语言. 编译型语言 很多传统的程序设计语言,例如Fortran.Ada.Pascal.C.C++和Java,都是编译型语言.这类语言需要预先将 ...
- 高级IO复用应用:聊天室程序
简单的聊天室程序:客户端从标准输入输入数据后发送给服务端,服务端将用户发送来的数据转发给其它用户.这里采用IO复用poll技术.客户端采用了splice零拷贝.服务端采用了空间换时间(分配超大的用户数 ...
- C程序设计语言--宏定义
C语言中的宏定义 C语言中的宏定义也叫做预处理命令,预处理命令是C语言本身的组成部分,不能直接对它们进行编译. 1.基本概念: 1>预处理不是C语句,是在编译前进行的 2>预处理功能主要用 ...
- 使用GitHub管理源代码
作为一个开发员,源码的管理是一个头等大事来的,想象一下,修改完成却发现文件丢失了,该怎么办?有了源代码管理工具,能够帮助我们查看某个代码文件的修改内存及历史修改记录. 作为.Net开发员,我使用过VS ...
- 用JAX-WS在Tomcat中公布WebService
JDK中已经内置了Webservice公布,只是要用Tomcat等Webserver公布WebService,还须要用第三方Webservice框架. Axis2和CXF是眼下最流行的Webservi ...
- Java-struts2的问题 java.lang.NoClassDefFoundError: org/apache/commons/lang3/StringUtils
缺commons-lang3-3.1.jar,添加之后就可以了
- RichTextBox选中文本时往自己的其他的位置实现拖拽
private void Form1_Load(object sender, EventArgs e) { richTextBox1.AllowDrop = true; richTextB ...
- cocos2dx 以子弹飞行为例解说拖尾效果类CCMotionStreak
在游戏开发中,有时会须要在某个游戏对象上的运动轨迹上实现渐隐效果.比方子弹的运动轨迹,假设不借助引擎的帮助,这样的效果则须要通过大量的图片来实现.而Cocos2D-x的拖动渐隐效果类CCMotionS ...
- LabVIEW设计模式系列——各种各样的状态机
- PureMVC(JS版)源码解析(十一):Model类
这篇博文讲PureMVC三个核心类——Model类.Model类的构造函数及工厂函数[即getInstance()方法]和View类.Controller类是一样的,这里就不重复讲解了,只 ...