『JavaScript』核心

弱类型语言

JavaScript是一种弱类型的语言。变量可以根据所赋的值改变类型。原始类型之间也可以进行类型转换。其弱类型的物质为其带来了极大的灵活性。

注意:原始类型使用值传递,复合类型使用引用传递。

原始类型 Key
布尔型 bool
数值型 number
字符串型 string
空类型 null
未定义类型 undefined

toString方法可以把数值或布尔值转换为字符串。parseFloat和parseInt函数可以把字符串类型转变为数值。双重非『!!』可以把字符串或数值转变为布尔值。

复合类型 Key
对象 object
函数 function

prototype

JavaScript是一种基于原型的语言,所以我们可以通过对JavaScript对象的原型进行操作来达成一些目的。比如:

  • 给某个对象添加方法;
  • 给某个对象添加属性;
  • 实现类似面向对象的功能;
  • ...

如果把JavaScript中的所有元素都当成对象来看待的话,我们可以得到一个合理的数据存储方式:JSON。

在JavaScript内部,所有的元素都可以认为是以JSON方式进行存储的。换言之,每一个元素都是有Key以及Value两部分组成。所以以下给对象Anim添加方法的方式都是正确的:

// Anim Class
var Anim = function() {
  // ...
};

// Add function to Anim
Anim.prototype.start = function() {};
Anim.prototype.stop = function() {};

// Another Way to add function to a class
Anim.prototype = {
  start: function() {
    // ...
  },

  stop: function() {
    // ...
  }
};

我们还可以使用下面的方式给Anim添加方法。这一方式是将prototype.method看作是一个key,将function(name,fn)看作是一个value,然后通过给function(name,fn)传入对应的参数来实现给Anim添加方法的目的。我们还在method中加入了return this,以此来实现链式调用的目的。

 // Add a method to the Function object that can be used to declare methods.
Function.protype.method = function(name, fn) {
  this.prototype[name] = fn;
  return this; // 链式调用
};

var Anim = function() {};
Anim.method('start', function() {
  // ...
});
Anim.method('stop', function() {
  // ...
});

 // Add a method to the Function object that can be used to declare methods.
Function.protype.method = function(name, fn) {
  this.prototype[name] = fn;
  return this;
};

var Anim = function() {};
Anim.method('start', function() {
  // ...
});
Anim.method('stop', function() {
  // ...
});

链式调用

Anim.
method('start', function() {
  // ...
}).
method('stop', function() {
  // ...
});

函数是一等对象

在JavaScript中,『函数』被认为是带有可执行代码的复合对象。也就是说,对象所拥有的,函数都拥有,且对象所能做的,函数都可以做。

主要特性:

  • 可以存储于变量中;
  • 可以作为参数传给其他函数;
  • 可以作为返回值从其他函数传出;
  • 可以在运行时构造。

由于函数是一种对象,所以我们可以以如下方式来使用函数:

// Function as Object
(function() {
  // ...
})()

(function(a, b) {
  // ...
  return a + b
})(1, 2)  

对象的易变性

在JavaScript中,所有的元素都可以被当成是对象,而且JavaScript中,所有的对象都是易变的。

我们可以使用如下的方式在程序运行时给JavaScript对象属性:

可以在需要的时候给对象添加属性(包括方法):

function aFunction(){};
aFunction.aAttribute = 0;

可以在需要的时候,通过对prototype的操作,给JavaScript对象添加方法:

function person(){
  this.name="Aaron";
  this.age=14;
};
person.prototype = {
  getName: function(){
    return this.name;
  },
  getAge: function(){
    return this.age;
  }
}

注意:由于JavaScript可以在任何时候为已经存在的对象添加属性、方法,所以我们往往不能保证最终被调用的属性、执行的方法是否是我们最初所编写的。

原文地址:https://www.cnblogs.com/sitemanager/p/3534841.html